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.