web-dev-qa-db-fra.com

Rails params expliqué?

Quelqu'un pourrait-il expliquer params dans Rails contrôleur: d'où viennent-ils et à quoi font-ils référence?

  def create
    @vote = Vote.new(params[:vote])
    item = params[:vote][:item_id]
    uid = params[:vote][:user_id]
    @extant = Vote.find(:last, :conditions => ["item_id = ? AND user_id = ?", item, uid])
    last_vote_time = @extant.created_at unless @extant.blank?
    curr_time = Time.now
  end

J'aimerais pouvoir lire ce code ligne par ligne et comprendre ce qui se passe.

221
Dru

Les paramètres proviennent du navigateur de l'utilisateur lorsqu'il demande la page. Pour une requête HTTP GET, qui est la plus courante, les paramètres sont codés dans l'URL. Par exemple, si le navigateur d'un utilisateur a demandé

http://www.example.com/?foo=1&boo=octopus

alors params[:foo] serait "1" et params[:boo] serait "pieuvre".

En HTTP/HTML, les paramètres ne sont en réalité qu'une série de paires clé-valeur dans lesquelles la clé et la valeur sont des chaînes, mais Ruby sur Rails possède une syntaxe spéciale pour créer les paramètres. être un hash avec des hachages à l'intérieur. Par exemple, si le navigateur de l'utilisateur a demandé

http://www.example.com/?vote [item_id] = 1 & vote [user_id] = 2

alors params[:vote] serait un hachage, params[:vote][:item_id] serait "1" et params[:vote][:user_id] serait "2".

Les paramètres Ruby sur Rails sont l'équivalent du tableau $ _ REQUEST en PHP .

275
David Grayson

Comme d'autres l'ont fait remarquer, les valeurs de params peuvent provenir de la chaîne de requête d'une requête GET ou des données de formulaire d'une requête POST, mais elles peuvent également provenir d'un troisième endroit: chemin de l'URL.

Comme vous le savez peut-être, Rails utilise quelque chose appelé routes pour diriger les requêtes vers les actions correspondantes de leur contrôleur. Ces itinéraires peuvent contenir des segments extraits de l'URL et placés dans params. Par exemple, si vous avez un itinéraire comme celui-ci:

match 'products/:id', ...

Ensuite, une requête sur une URL telle que http://example.com/products/42 définira params[:id] sur 42.

73
hammar

Params contient les trois groupes de paramètres suivants:

  1. Paramètres fournis par l'utilisateur
    • GET ( http://domain.com/url?param1=value1&param2=value2 définira les paramètres [: param1] et params [: param2 ])
    • POST (par exemple, JSON, XML sera automatiquement analysé et stocké dans des paramètres)
    • Remarque: Par défaut, Rails duplique les paramètres fournis par l'utilisateur et les stocke dans params [: user] si, dans UsersController, peut être modifié avec le paramètre wrap_parameters.
  2. Paramètres de routage
    • match '/user/:id' dans routes.rb définira les paramètres [: id]
  3. Paramètres par défaut
    • params[:controller] et params[:action] est toujours disponible et contient le contrôleur et l'action actuels.
47
thejaz

Fondamentalement, les paramètres sont des données spécifiées par l'utilisateur dans Rails application.

Lorsque vous publiez un formulaire, vous le faites généralement avec la demande POST par opposition à la demande GET. Vous pouvez penser aux demandes normales Rails en tant que demandes GET, lorsque vous naviguez sur le site, si cela vous aide.

Lorsque vous soumettez un formulaire, le contrôle est renvoyé à l'application. Comment obtenez-vous les valeurs que vous avez soumises au formulaire? params c'est comment.

A propos de votre code. @vote = Vote.new params[:vote] crée un nouveau vote sur la base de données à l'aide des données de params [: vote]. Étant donné que votre formulaire utilisateur soumis a été nommé sous le nom: vote, toutes les données y figurent: champ de vote du hachage.

Les deux lignes suivantes sont utilisées pour obtenir l'élément et l'utilisateur uid a soumis au formulaire.

@extant = Vote.find(:last, :conditions => ["item_id = ? AND user_id = ?", item, uid])

trouve le vote le plus récent ou le dernier inséré dans la base de données avec les conditions item_id = item et user_id = uid.

Les lignes suivantes prennent l'heure du dernier vote et l'heure actuelle.

13
Smar

Du côté Rails, params est une méthode qui renvoie un objet ActionController::Parameters. Voir https://stackoverflow.com/a/44070358/5462485

4
Margotte