Quelqu'un pourrait-il expliquer params
dans le contrôleur Rails: d'où ils viennent et à quoi ils font 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
Je voudrais pouvoir lire ce code ligne par ligne et comprendre ce qui se passe.
Réponses:
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 encodé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 » etparams[:boo]
serait « pieuvre ».En HTTP / HTML, les paramètres ne sont en réalité qu'une série de paires clé-valeur où la clé et la valeur sont des chaînes, mais Ruby on Rails a une syntaxe spéciale pour faire des paramètres un hachage avec des hachages à l'intérieur. Par exemple, si le navigateur de l'utilisateur a demandé
http://www.example.com/?vote[item_id
alors
params[:vote]
serait un hachage,params[:vote][:item_id]
serait « 1 » etparams[:vote][:user_id]
serait « 2 ».Les paramètres Ruby on Rails sont l'équivalent du tableau $ _REQUEST en PHP .
la source
params
hachage Rails . Les données des cookies sont incluses dans lesession
hachage.Comme d'autres l'ont souligné, les
params
valeurs peuvent provenir de la chaîne de requête d'une demande GET ou des données de formulaire d'une demande POST, mais il y a aussi un troisième endroit d'où elles peuvent provenir: le chemin de l'URL.Comme vous le savez peut-être, Rails utilise quelque chose appelé routes pour diriger les demandes vers leurs actions de contrôleur correspondantes. 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:Ensuite, une demande à une URL comme
http://example.com/products/42
sera définieparams[:id]
sur42
.la source
Params contient les trois groupes de paramètres suivants:
match '/user/:id'
dans routes.rb définira les paramètres [: id]params[:controller]
etparams[:action]
est toujours disponible et contient le contrôleur et l'action actuelsla source
User supplied parameters
un peu plus? Par exemple, un exemple du hachage params dans UsersController serait utile. Votre exemple donne l'impression que le hachage ressemblera à quelque chose:{first_name: "mike", user: {first_name: "mike"} ...}
est-ce correct?{"_method"=>"put", "authenticity_token"=>"gubHya6uQrQLjPRXhOC0RUuCRdn7NFr6CeKrbRfBSHI=", "ripe"=>"true", "action"=>"update", "controller"=>"apples", "id"=>"4"}
. Pardonnez-moi si je me trompe, je suis un débutant sur les rails. Selon votre note, je devrais voir:{"_method"=>"put", "authenticity_token"=>"gubHya6uQrQLjPRXhOC0RUuCRdn7NFr6CeKrbRfBSHI=", "ripe"=>"true", "apple" => {"ripe"=>"true"}, "action"=>"update", "controller"=>"apples", "id"=>"4"}
je ne sais pas si cela a à voir avec des paramètres forts dans rails4 ou non.Fondamentalement, les paramètres sont des données spécifiées par l'utilisateur pour l'application rails.
Lorsque vous publiez un formulaire, vous le faites généralement avec une demande POST par opposition à une demande GET. Vous pouvez considérer les demandes de rails normales comme des 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 dans le formulaire?
params
c'est comment.À propos de votre code.
@vote = Vote.new params[:vote]
crée une nouvelle base de données Vote to en utilisant les données des paramètres [: vote]. Étant donné que l'utilisateur de votre formulaire soumis a été nommé sous le nom: vote, toutes les données de celui-ci se trouvent dans ce champ: vote du hachage.Les deux lignes suivantes sont utilisées pour obtenir l'élément et l'utilisateur uid a soumis le formulaire.
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.
la source
Du côté Rails,
params
est une méthode qui renvoie unActionController::Parameters
objet. Voir https://stackoverflow.com/a/44070358/5462485la source
params
c'est une méthode. Ruby peut rendre difficile la distinction des variables des méthodes