2010-03-19 5 views
1

Dans mon modèle principal que je donne les résultats suivants:Erreur lors du rendu d'une partielle (RoR) faire passer la forme comme une variable locale

<%= render :partial => "delivery_date", :collection => @brand.delivery_dates, :locals => {:form => f} %> 

Toutefois, lorsque les essais partiels d'utiliser la forme variable locale, je reçois cette erreur

Showing app/views/brands/_delivery_date.html.erb where line #2 raised: 

wrong number of arguments (0 for 1) 
Extracted source (around line #2): 

1: <%= delivery_date.id %> 
2: <%= form.text_field :name %> 
3: <% new_or_existing = delivery_date.new_record? ? 'new' : 'existing' %> 
4: <% prefix = "brand[#{new_or_existing}_delivery_date_attributes][]" %> 
5: <% fields_for prefix, delivery_date do |dd_f| %> 

Est-ce que quelqu'un comprend ce que cette erreur signifie?

En fait, je veux faire

<% form.fields_for delivery_date do |dd_f| %> 

mais cela ne fonctionne pas aussi bien.

J'ai essayé de remplacer :locals par :locals => { :f => f } et de faire référence au formulaire en utilisant f dans le partiel. Aucun effet, l'erreur est alors undefined method or variable f.

...

Ok plutôt que de vous demander de déboguer une erreur, la question est aussi comment rendre fields_for sous une forme partielle imbriqué:

dans le modèle principal:

<% form_for @object do |f| %> 
    <% render :partial => 'child', :collection: @object.child %> 
<% end %> 

Dans le modèle enfant:

<% form.fields_for child do |c_f| %> 
    <%= c_f.text_field :foo %> 
<% end %> 

Quelle est la manière appropriée de passer ce formulaire objet?

Désolé oublié d'ajouter l'environnement:

Ruby 1.8.7

Rails 2.3.? (Doivent consulter la version mineure, ne pas le code devant moi)

(je sais que c'est une question de débutant :()

Répondre

1

C'est bizarre cela devrait fonctionner comme vous l'avez avec:. ou sous forme. f Si vous utilisez Ruby 1.9, peut-être là C'est une différence dans la façon dont les variables locales fonctionnent. Je voudrais essayer :locals => { "f" => f } avec une clé de chaîne au lieu de symbole et voir si cela aide. Aussi, fonctionne-t-il pour utiliser un cas plus simple comme :locals => { :x => 2 }?

+0

: local => {: x => 2} fonctionne. Coencidentally je réalise depuis que je rends également ce modèle dans un link_to_function, il aurait pu être que je ne cherchais pas à la pile d'erreur complètement et manquant où l'erreur a été de comming. Je pense que cela a aidé: P Je vais continuer à le faire. Merci. –

1

vous passez: form => f ainsi que la partie Remplacez simplement toutes les instances de "form" par "f" dans votre partial sinon ruby ​​/ rails pense que vous essayez d'appeler la méthode builder de formulaire (par exemple, "f"). et qui nécessite au moins un argument, d'où le message d'erreur)

+0

Vous devez également remplacer le hachage ': locals' par' {: f => f} 'dans ce cas. – Tom

+0

Merci! Um comment fonctionne le hash local? : form => f qui ne définit pas la variable de formulaire? Désolé un peu confus là-dessus. –

+0

Cela ne fonctionne pas. Si j'utilise ': locals => {: f => f}' et que j'utilise 'f' au lieu de' form' dans le partial, j'obtiens une erreur variable indéfinie. –

Questions connexes