Rails partial locals not persisting when sent to another partial as its own local
-
11-09-2019 - |
Question
I render a partial like so:
<%= render :partial => 'widgets/some_partial, :locals => {:foo => 'bar'} %>
So inside of _some_partial.html.erb
I render two more partials like so:
<% #foo.nil? #=> false %>
<%= render :partial => 'widgets/another_partial', :locals => {:foo => foo} %>
`<%= render :partial => 'widgets/another_partial_again', :locals => {:foo => foo} %>`
The foo local variable renders fine in some_partial.html.erb
and even in another_partial_again.html.erb
. However, the foo variable is inaccessible in another_partial.html.erb
even though I explicitly passed it in the render call.
What is happening here?
Thanks for the help.
Solution 2
Solved. Turns out I was also rendering the same partial from the controller without sending the proper local variables. Thanks anyways!!!
OTHER TIPS
I had the undefined local variable or method
error come up for me too when I was rendering a partial with :locals
defined.
However, I had a different issue causing my problem, so I thought I would share my solution in case it helps anyone else. (This page was the first result when I googled this error after all)
Basically just make sure you use :partial => 'path/to/partial'
in your call to render
.
I.e.
<%= render :partial => 'widgets/some_partial', :locals => {:foo => 'bar'} %>
NOT like I was doing:
<%= render 'widgets/some_partial', :locals => {:foo => 'bar'} %>
Easy for a rails/ruby newbie like me to miss.
Bumped into this very old question cause I faced the same issue. Turned out that with Rails 4+ if you are not using collections or layout the correct way is:
# Instead of <%= render partial: "account", locals: { account: @buyer } %>
<%= render "account", account: @buyer %>
As documented here.