2009-11-01 3 views
0

Как построить вспомогательный метод, который выглядит какметод Helper, который инкапсулирует два form_for блоки

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

и инкапсулирует две формы, как

-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" 

ответ

0

Я не думаю, что есть способ, чтобы получить именно что вы ищете без переопределения form_for. Или написать свою собственную версию.

Вы можете приблизиться к FormBuilders или Partials или Помощникам, но ни одно из этих понятий не позволит вам делать то, что вы хотите сделать.

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) 

vie w:

= render :partial => :confirmation_for, :locals => {:action => :confirm} 
= render :partial => :confirmation_for, :locals => {:action => :edit} 

Затем вы можете объединить оба частичных вызова в другой частичный. Но это слишком далеко.

 Смежные вопросы

  • Нет связанных вопросов^_^