rails-que font exactement les balises hidden field et hidden field?
j'ai lu la définition technique de hidden_fields
, mais je ne suis pas sûr de ce qu'il fait vraiment. Ma compréhension est qu'il vous permet de passer dans un attribut de certains paramètres. Par exemple, si vous avez un riche rejoindre modèle, vous pouvez utiliser le hidden_field
assigner l'user_id à l'attribut join model for user. Est-ce exact?
Si oui, serait-il préférable de le faire dans la forme ou le contrôleur?
2 réponses
ces deux méthodes sont des helpers pour créer une balise HTML de type "hidden", et oui, elles sont utilisées pour ajouter des paramètres à une requête (typiquement un formulaire POST). En fait, le paramètre peut être n'importe quelle information que vous voulez envoyer avec une demande. Attention, cependant, que les champs cachés sont facilement manipulés.
Voici un exemple qui va envoyer un id utilisateur dans un champ caché
# Form
<%= form_tag foo_path do %>
<%= hidden_field_tag "user_id", @user.id %>
....
<%= submit_tag "Click Me" %>
<% end %>
# Controller
def foo
# params[:user_id] is set with the value from the hidden field
# Do useful stuff with the POST data
end
alors que vous pouvez passer des choses comme user_id comme ceci, je trouve que la nécessité pour elle est rare. Si un user_id est toujours requis pour une situation donnée, vous pourriez envisager d'utiliser des routes imbriquéeshttp://guides.rubyonrails.org/routing.html#nested-resources.
il générerait un type caché de champ d'entrée...
<input type="hidden" />
c'est une façon de stocker l'information que vous voulez soumettre avec le formulaire sans avoir à avoir un champ visible.
hidden_field_tag 'tags_list'
génère...<input id="tags_list" name="tags_list" type="hidden" />
hidden_field_tag
est destiné à être utilisé sans modèle alors que hidden_field
est destiné à être utilisé en conjonction avec un form_for
appel et un modèle.
hidden_field(:signup, :pass_confirm)
génère...<input type="hidden" id="signup_pass_confirm" name="signup[pass_confirm]" value="#{@signup.pass_confirm}" />