Linus Oleander
Linus Oleander

Reputation: 18127

rails simple_form - hidden field - create?

How can you have a hidden field with simple form?

The following code:

= simple_form_for @movie do |f|
  = f.hidden :title, "some value"
  = f.button :submit

results in this error:

undefined method `hidden' for #SimpleForm::FormBuilder:0x000001042b7cd0

Upvotes: 184

Views: 138869

Answers (5)

Mandeep Ashiya
Mandeep Ashiya

Reputation: 1

None of the above worked perfectly in my case, as they were leaving a blank rectangle on my frontend. What worked for me was -

<%= f.text_field :title, value: "some value", type: "hidden" %>

Upvotes: 0

Uzzar
Uzzar

Reputation: 703

Correct way (if you are not trying to reset the value of the hidden_field input) is:

f.hidden_field :method, :value => value_of_the_hidden_field_as_it_comes_through_in_your_form

Where :method is the method that when called on the object results in the value you want

So following the example above:

= simple_form_for @movie do |f|
  = f.hidden :title, "some value"
  = f.button :submit

The code used in the example will reset the value (:title) of @movie being passed by the form. If you need to access the value (:title) of a movie, instead of resetting it, do this:

= simple_form_for @movie do |f|
  = f.hidden :title, :value => params[:movie][:title]
  = f.button :submit

Again only use my answer is you do not want to reset the value submitted by the user.

I hope this makes sense.

Upvotes: 5

Fuad Saud
Fuad Saud

Reputation: 3366

= f.input_field :title, as: :hidden, value: "some value"

Is also an option. Note, however, that it skips any wrapper defined for your form builder.

Upvotes: 5

Michael Durrant
Michael Durrant

Reputation: 96454

Shortest Yet !!!

=f.hidden_field :title, :value => "some value"

Shorter, DRYer and perhaps more obvious.

Of course with ruby 1.9 and the new hash format we can go 3 characters shorter with...

=f.hidden_field :title, value: "some value"

Upvotes: 293

fl00r
fl00r

Reputation: 83680

try this

= f.input :title, :as => :hidden, :input_html => { :value => "some value" }

Upvotes: 330

Related Questions