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?

14
demandé sur noob 2011-10-12 02:04:39

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.

31
répondu Wizard of Ogz 2011-10-11 22:43:30

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.

documentation:

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}" />

10
répondu Chad Moran 2011-10-11 23:24:11