2010-04-17 5 views
4

Je ne semble pas être en mesure de passer une variable à mon modèle partiel dans les rails (2.3.5). Mon code est le suivant:La variable locale n'est pas transmise au modèle partiel par le rendu?

Dans l'écran principal fichier .html.erb:

<% f.fields_for :payments do |payment_form| %> 
    <%= render 'payment', {:f => payment_form, :t => "test" } %> 
<% end %> 

et dans le fichier _payment.html.erb:

<%= t %> 

produit une erreur wrong number of arguments (0 for 1). L'objet payment_form est transmis au partiel en tant que f sans aucun problème. J'ai essayé un certain nombre de variations sur la syntaxe ci-dessus (par exemple :locals => {:f => payment_form, :t => "test" } sans succès. Je suppose que je fais quelque chose de très mal de base mais je ne peux pas le voir.

+1

Rendez-vous «payment» ailleurs, sans ': t' dans le cadre de vos locaux? – vladr

+0

Aah oui je l'ai fait (même si j'ai dû penser à si pendant un moment). C'est un formulaire imbriqué partiel que je suis en train de rendre et juste après avoir <% = link_to_new_nested_form "Paiement additionnel", f,: payments%>. Évidemment, cela rend le partiel (bien qu'il soit caché dans javascript jusqu'à ce que nécessaire). Merci. Pourquoi ne pas mettre une réponse afin que je puisse l'accepter et envoyer un représentant à votre façon! – brad

Répondre

1

Essayez

render :partial => 'payment', :locals => {:t => 'test'} 
+0

Non, ne fonctionne pas. Le: partial => 'payment' est juste un long chemin pour dire 'payment' (à partir de Rails 2.3) et le hash local: manquant: f => payment_form. Merci d'avoir regardé ma question. – brad

1

Avez-vous essayé <%= render 'payment', :f => payment_form %>

Je ne suis pas sûr de ce que l':. t est pour, mais rails est évidemment dire que vous ne devriez de passage dans un paramètre supplémentaire avec le mauvais nombre d'arguments (0 pour 1) d'erreur

+0

Le t était juste une façon de tester l'expression avant de passer à travers la variable réelle que je voulais (que je n'avais pas encore complètement créée). La solution actuelle est décrite dans les commentaires de la question grâce à Vlad Romascanu qui me fait regarder de plus près. Il n'y avait, en effet, rien de mal dans mon expression, j'appelais simplement le partiel ailleurs sans m'en rendre compte. – brad

2

C'est probablement parce que t() est une méthode d'aide à la vue réservée utilisée pour I18n. Renommez-le simplement en quelque chose de plus descriptif.

+0

Non, peu importe ce que je l'ai appelé, ça ne fonctionnait toujours pas. – brad

Questions connexes