web-dev-qa-db-ja.com

Rails form_forオブジェクトをパーシャルに渡す

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を使用するにはどうすればよいですか?

38
Harry

フォームオブジェクトをローカルとして渡してみてください<%= render :partial => "price_page", :locals=>{:f=>f} %>

56
Amar

以下のように、フォームビルダーオブジェクトをローカル変数として渡すことができます。

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

部分ファイルでは、ローカル変数「f」としてフォームビルダーを受け取ります。以下のように使用できます。

  <% f.radio_button, {} %>
8
Mohanraj

追加のフォームタグなしでフォームビルダーをパーシャルに変換する方法を理解しようとして、この質問に遭遇しました。これがこの質問で考えられる主要なユースケースなので、将来の訪問者のためにこの回答を追加します。

私の問題を解決するために、私のform_forをレイアウトに入れ、モデルのみを渡してパーシャルをレンダリングします。私のパーシャルでは fields_for を使用しています。

次のように見えます(何か):

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

次に、私の部分はこれを持っています:

= fields_for price do |f|
   ...
5
D. Patrick