Я не думаю, что есть способ получить именно то, что вы ищете, без переопределения form_for. Или написать свою собственную версию.
Вы можете сблизиться с FormBuilders, Partials или Helpers, но ни одна из этих концепций сама по себе не позволит вам делать то, что вы хотите.
FormBuilder позволит вам определять методы, которые будут вызываться в форме, такие как подтверждение и редактирование, но они будут частью одной и той же формы. Если вы не создадите две формы.
В соответствующем вспомогательном файле:
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}
Затем можно объединить оба частичных вызова в другой частичный. Но это заходит слишком далеко.