2009-11-01 5 views
0

Comment construire une méthode d'assistance qui ressemble àMéthode d'assistance qui encapsule deux blocs form_for

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

et encapsule deux formes comme

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

Répondre

0

Je ne pense pas qu'il y ait un moyen d'obtenir exactement ce que vous cherchez sans redéfinir form_for. Ou écrire votre propre version de celui-ci.

Vous pouvez vous rapprocher de FormBuilders ou de Partials ou Helpers, mais aucun de ces concepts ne vous permet de faire ce que vous cherchez.

Un FormBuilder vous permettra de définir les méthodes à appeler sur le formulaire, comme confirmer et éditer, mais elles feront partie du même formulaire. Sauf si vous créez deux formulaires.

Dans le fichier d'aide connexe:

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 

Exemple d'utilisation:

- form_for [@posts,@comments], :builder => ExampleFormBuilder do |f| 
    = f.confirm 
- form_for [@posts,@comments], :builder => ExampleFormBuilder do |f| 
    = f.edit 

Lorsqu'il est utilisé avec une partie que vous pourriez faire quelque chose comme ça

partielle:

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

Vous pouvez ensuite regrouper les deux appels partiels dans un autre partiel. Mais ça va un peu trop loin.

Questions connexes