form_for を再定義せずに、探しているものを正確に取得する方法はないと思います。または、独自のバージョンを作成します。
FormBuilders、Partials、または Helpers に近づくことはできますが、これらの概念だけでは、やりたいことを実現することはできません。
FormBuilder を使用すると、confirm や edit など、フォームで呼び出されるメソッドを定義できますが、それらは同じフォームの一部になります。2 つのフォームを作成しない限り。
関連するヘルパー ファイル:
class ExampleFormBuilder < ActionView::Helpers::FormBuilder
def confirm
hidden_field(:submission_state, :value => "confirmed") + "\n" + submit "Post"
end
def edit
hidden_field(:submission_state, :value => "edit_requested") + "\n" + submit "Edit"
end
end
使用例:
- form_for [@posts,@comments], :builder => ExampleFormBuilder do |f|
= f.confirm
- form_for [@posts,@comments], :builder => ExampleFormBuilder do |f|
= f.edit
パーシャルで使用すると、次のようなことができます
部分的:
- form_for [@posts,@comments], :builder => ExampleFormBuilder do |f|
= f.send(action)
見る:
= render :partial => :confirmation_for, :locals => {:action => :confirm}
= render :partial => :confirmation_for, :locals => {:action => :edit}
次に、両方の部分呼び出しを別の部分呼び出しにバンドルできます。しかし、それは少し行き過ぎです。