2009-08-06 9 views
10

j'effectue un rendu partiel comme ceci:Rails locaux partiels non persistant lorsqu'ils sont envoyés à une autre partie comme son propre locale

<%= render :partial => 'widgets/some_partial, :locals => {:foo => 'bar'} %> 

donc à l'intérieur de _some_partial.html.erb je rends deux partials comme ceci:

<% #foo.nil? #=> false %> 
<%= render :partial => 'widgets/another_partial', :locals => {:foo => foo} %> 
`<%= render :partial => 'widgets/another_partial_again', :locals => {:foo => foo} %>` 

La variable locale foo est très bien affichée dans some_partial.html.erb et même dans another_partial_again.html.erb. Cependant, la variable foo est inaccessible dans another_partial.html.erb même si je l'ai explicitement passé dans l'appel de rendu.

Qu'est-ce qui se passe ici?

Merci pour l'aide.

+0

Qu'entendez-vous par «inaccessible»? Est-ce qu'il lance une «variable ou méthode locale non définie» ou est-ce «nil»? Pouvez-vous montrer le code qui utilise 'foo' sur ces sous-partiels? – hsribei

+0

il jette une variable locale indéfinie – user94154

+0

le code était simple: <%= foo %> – user94154

Répondre

3

Résolu. Il s'avère que je rendais également le même partiel du contrôleur sans envoyer les variables locales correctes. Merci quand même!!!

+1

J'ai effectivement eu le même problème, et ma solution était exactement la même - je l'ai compris quand j'ai vu votre erreur: P –

+0

moi aussi! Ha. J'ai changé mon haml de: "- si myvar" à "- si défini? (Myvar) && myvar" – Chris

+0

même ici, passait le partiel dans AJAX, a oublié de changer le symbole – yoshyosh

41

J'ai eu l'erreur undefined local variable or method provoqué pour moi aussi quand je rendais un partiel avec :locals défini.

Cependant, un problème différent est à l'origine de mon problème. J'ai donc décidé de partager ma solution au cas où cela aiderait quelqu'un d'autre. (Cette page a été le premier résultat lorsque j'ai googlé cette erreur après tout)

Fondamentalement, assurez-vous d'utiliser :partial => 'path/to/partial' dans votre appel à render.

I.e.

<%= render :partial => 'widgets/some_partial', :locals => {:foo => 'bar'} %> 

pas comme si je faisais:

<%= render 'widgets/some_partial', :locals => {:foo => 'bar'} %> 

facile pour un rail/débutant rubis comme moi à manquer.

+0

+1 Life Saver, merci !! –

+6

+1 @ asgeo1 C'est étrange que vous ayez besoin de ': partial' pour que ça marche, mais ça marche! – iwasrobbed

+0

wow !!! Merci ... J'apprends juste Ruby et j'étais totalement confus au sujet de cette erreur. J'aimerais pouvoir modifier plus de points. – Nabheet

0

Bumped dans cette très vieille question parce que j'ai fait face au même problème. avéré que Rails 4+ si vous n'utilisez pas des collections ou la mise en page est la bonne façon:

# Instead of <%= render partial: "account", locals: { account: @buyer } %> 
<%= render "account", account: @buyer %> 

Comme indiqué here.