Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

rails - what exactly does hidden_field and hidden_field_tag do?

Tags:

I read through the techy definition of hidden_fields, but am not sure what it really does. My understanding is that it allows you to pass in an attribute for certain parameters. For example, if you have a rich join model, you can use the hidden_field to assign the user_id to the join model attribute for user. Is that correct?

If so, would it be better to do it in the form or the controller?

like image 597
noob Avatar asked Oct 11 '11 22:10

noob


People also ask

What is Hidden_field_tag?

From the documentation: hidden_field_tag 'tags_list' generates... <input id="tags_list" name="tags_list" type="hidden" /> hidden_field_tag is meant to be used without a model whereas hidden_field is meant to be used in conjunction with a form_for call and a model.

What is hidden_ field Rails?

hidden_field(object_name, method, options = {}) public. Returns a hidden input tag tailored for accessing a specified attribute (identified by method) on an object assigned to the template (identified by object). Additional options on the input tag can be passed as a hash with options.


2 Answers

Both of those methods are helpers to create an HTML input tag of type "hidden", and yes, those are used to add parameters to a request (typically a form POST). Really the parameter can be any piece of information you want to send along with a request. Be careful, though, as hidden fields are easily tampered with.

Here's an example that will send a user id in a hidden field

# 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 

While you can pass things such as user_id's like this, I find that the need for it is rare. If a user_id is always required for a given situation you might consider using nested routes http://guides.rubyonrails.org/routing.html#nested-resources.

like image 95
Wizard of Ogz Avatar answered Sep 18 '22 09:09

Wizard of Ogz


It would generate a hidden type of input field...

<input type="hidden" />

This is a way to store information that you want submitted with the form without having to have a visible field.

From the documentation:

hidden_field_tag 'tags_list' generates...
<input id="tags_list" name="tags_list" type="hidden" />

hidden_field_tag is meant to be used without a model whereas hidden_field is meant to be used in conjunction with a form_for call and a model.

hidden_field(:signup, :pass_confirm) generates...
<input type="hidden" id="signup_pass_confirm" name="signup[pass_confirm]" value="#{@signup.pass_confirm}" />

like image 20
Chad Moran Avatar answered Sep 18 '22 09:09

Chad Moran