web-dev-qa-db-fra.com

Rails passant objet form_for à partiel

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?

38
Harry

Essayez de passer un objet de formulaire en tant que local <%= render :partial => "price_page", :locals=>{:f=>f} %>

56
Amar

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, {} %>
8
Mohanraj

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|
   ...
5
D. Patrick