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.
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 .
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
.
Params contient les trois groupes de paramètres suivants:
match '/user/:id'
dans routes.rb définira les paramètres [: id] params[:controller]
et params[:action]
est toujours disponible et contient le contrôleur et l'action actuels.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.
Du côté Rails, params
est une méthode qui renvoie un objet ActionController::Parameters
. Voir https://stackoverflow.com/a/44070358/5462485