38

我想将form_for对象传递给部分:

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

当我打电话时:

f.radio_button

带来错误:

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

我怎样才能f像往常一样使用这个部分?

4

3 回答 3

56

尝试将表单对象作为本地传递 <%= render :partial => "price_page", :locals=>{:f=>f} %>

于 2012-09-03T11:27:31.223 回答
8

您可以将表单构建器对象作为局部变量传递,如下所示,

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

在您的部分文件中,您将收到表单生成器作为局部变量“f”,您可以使用如下所示,

  <% f.radio_button, {} %>
于 2012-09-03T11:31:46.250 回答
6

我遇到了这个问题,试图弄清楚如何在没有额外表单标签的情况下将表单构建器变成部分。这是我能想到的这个问题的主要用例,所以我为未来的访问者添加了这个答案。

为了解决我的问题,我在我的布局中有我的 form_for 并且我渲染了我的部分传递只模型。在我的部分中,我使用fields_for

看起来(东西)像这样:

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

然后,我的部分有这个:

= fields_for price do |f|
   ...
于 2014-09-01T21:01:53.907 回答