184

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

5 Answers 5

330

try this

= f.input :title, :as => :hidden, :input_html => { :value => "some value" }
2
  • 9
    Thanks, that worked. = f.input :title, :as => :hidden, :input_html => { :value => "some value" } Commented Mar 20, 2011 at 21:14
  • 6
    This is the simple_form way to do hidden inputs, however, if only a hidden input is needed, then just use Rails' hidden_field form builder since Simple Form inherits all the form builder methods.
    – scarver2
    Commented Nov 4, 2014 at 1:18
293

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"
3
  • 1
    Or <%= f.hidden_field :term_id, :value => @transaction.term_id %>
    – mirap
    Commented Nov 11, 2015 at 18:05
  • 2
    This should be the accepted answer. Even though the question asked about simple form, there is no reason to use it when this accomplishes the exact same thing with a shorter syntax.
    – Greg Blass
    Commented Feb 24, 2017 at 23:21
  • when using custom name or using the input_html key, this did not seem to work as expected. The accepted answer worked better Commented May 1, 2023 at 2:39
5
= 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.

5

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.

1
  • 2
    For simple_form_for, the hidden method using here is going to raise an error undefined method hidden' for #<SimpleForm::FormBuilder:0x00007ffa6cde0be8>`
    – Kiry Meas
    Commented Jul 2, 2018 at 17:29
0

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" %>

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.