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
を使用するにはどうすればよいですか?
フォームオブジェクトをローカルとして渡してみてください<%= render :partial => "price_page", :locals=>{:f=>f} %>
以下のように、フォームビルダーオブジェクトをローカル変数として渡すことができます。
<%= form_for @price do |f| %>
<%= render :partial => "price_page", :locals => { :f => f } %>
<% end %>
部分ファイルでは、ローカル変数「f」としてフォームビルダーを受け取ります。以下のように使用できます。
<% f.radio_button, {} %>
追加のフォームタグなしでフォームビルダーをパーシャルに変換する方法を理解しようとして、この質問に遭遇しました。これがこの質問で考えられる主要なユースケースなので、将来の訪問者のためにこの回答を追加します。
私の問題を解決するために、私のform_forをレイアウトに入れ、モデルのみを渡してパーシャルをレンダリングします。私のパーシャルでは fields_for を使用しています。
次のように見えます(何か):
= form_for @price do |f|
...
= render partial: "price_page", object: @price, as: 'price %>
...
次に、私の部分はこれを持っています:
= fields_for price do |f|
...