Je voudrais passer le form_for
s'opposer à un partiel:
<%= form_for @price do |f| %>
...
<%= render :partial => "price_page", :object => @price, :as => :f %>
...
<% end %>
Quand j'appelle:
f.radio_button
Apporte l'erreur:
undefined method `radio_button' for #<Price:0x3cb1ed0>
Comment puis-je utiliser f
comme je le ferais habituellement dans ce partiel?
Essayez de passer un objet de formulaire en tant que local <%= render :partial => "price_page", :locals=>{:f=>f} %>
Vous pouvez passer un objet constructeur de formulaire en tant que variable locale comme ci-dessous,
<%= form_for @price do |f| %>
<%= render :partial => "price_page", :locals => { :f => f } %>
<% end %>
dans votre fichier partiel, vous recevrez le générateur de formulaire en tant que variable locale "f", vous pouvez utiliser comme ci-dessous,
<% f.radio_button, {} %>
J'ai rencontré cette question en essayant de comprendre comment obtenir un générateur de formulaire dans un partiel sans balise de formulaire supplémentaire. C'est le cas d'utilisation principal auquel je pourrais penser pour cette question, donc j'ajoute cette réponse pour les futurs visiteurs.
Pour résoudre mon problème, j'ai mon form_for dans ma mise en page et je rend mon partiel en ne passant que le modèle. Dans mon partiel, j'utilise fields_for .
Ressemble (quelque chose) à ceci:
= form_for @price do |f|
...
= render partial: "price_page", object: @price, as: 'price %>
...
Ensuite, mon partiel a ceci:
= fields_for price do |f|
...