40

I would like to pass the form_for object to a partial:

<%= form_for @price do |f| %>
   ...
   <%= render :partial => "price_page", :object => @price, :as => :f %>
   ...
<% end %>

When I call:

f.radio_button

Brings the error:

undefined method `radio_button' for #<Price:0x3cb1ed0>

How can I use f as I usually would in this partial?

3 Answers 3

60

Try passing form object as local <%= render :partial => "price_page", :locals=>{:f=>f} %>

Sign up to request clarification or add additional context in comments.

1 Comment

Only problem I had with this is you can't include nested_form inside the partial. Returns error.
10

You can pass form builder object as a local variable like below,

<%= form_for @price do |f| %>
     <%= render :partial => "price_page", :locals => { :f => f } %>
<% end %>

in your partial file you will be receiving form builder as a local variable "f", you can use like below,

  <% f.radio_button, {} %>

2 Comments

Yea but only a few minutes after!
Yes, SO i brutal about rushing to be the first to answer.
6

I ran across this question trying to figure out how to get a form builder into a partial without an additional form tag. That's the primary use case I could think of for this question, so I'm adding this answer for future visitors.

To solve my problem, I have my form_for in my layout and I render my partial passing only the model. In my partial I use fields_for.

Looks (something) like this:

= form_for @price do |f|
   ...
   = render partial: "price_page", object: @price, as: 'price %>
   ...

Then, my partial has this:

= fields_for price do |f|
   ...

Comments

Your Answer

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

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.