将form_for对象传递给partial的Rails

Har*_*rry 36 ruby-on-rails object actionview partials

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

<%= form_for @price do |f| %>
   ...
   <%= render :partial => "price_page", :object => @price, :as => :f %>
   ...
<% end %>
Run Code Online (Sandbox Code Playgroud)

我打电话的时候:

f.radio_button
Run Code Online (Sandbox Code Playgroud)

带来错误:

undefined method `radio_button' for #<Price:0x3cb1ed0>
Run Code Online (Sandbox Code Playgroud)

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

Ama*_*mar 54

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


小智 8

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

<%= form_for @price do |f| %>
     <%= render :partial => "price_page", :locals => { :f => f } %>
<% end %>
Run Code Online (Sandbox Code Playgroud)

在您的部分文件中,您将接收表单构建器作为本地变量"f",您可以使用如下所示,

  <% f.radio_button, {} %>
Run Code Online (Sandbox Code Playgroud)


D. *_*ick 5

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

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

看起来(像这样):

= form_for @price do |f|
   ...
   = render partial: "price_page", object: @price, as: 'price %>
   ...
Run Code Online (Sandbox Code Playgroud)

然后,我的部分有这个:

= fields_for price do |f|
   ...
Run Code Online (Sandbox Code Playgroud)