0

次のようなヘルパーメソッドをどのように作成しますか

-confirmation_for [@post, @comment] do |f|
  = f.confirm "Post"
  %p html here...
  = f.edit    "Edit"

次のような2つのフォームをカプセル化します

-form_for [@post, @commment] do |f|
  = f.hidden_field :submission_state, :value => "confirmed"
  = f.submit "Post"
%p html here...
-form_for [@post, @commment] do |f|
  = f.hidden_field :submission_state, :value => "edit_requested"
  = f.submit "Edit"
4

1 に答える 1

0

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}

次に、両方の部分呼び出しを別の部分呼び出しにバンドルできます。しかし、それは少し行き過ぎです。

于 2009-11-01T10:34:41.230 に答える