我有一个常见的问题,通常我会用locals
解决,但这次不会工作。
我有以下块:
<% @user.followers.each do |follower| %>
<%= render "follower_card" %>
<% end %>
以下部分:
<div class="row follower-card">
<%= image_tag follower.avatar_url(:smallthumb), class: "col-4 inline avatar_medium circle" %>
<ul class="col-8 inline">
<li><%= follower.name %></li>
<li><%= follower.location %></li>
<li class="lightgray small inline"><span class="bold"><%= follower.photos.count %></span> Spots</li> -
<li class="lightgray small inline"><span class="bold"><%= follower.albums.count %></span> Spotbooks</li>
</ul>
</div>
我收到以下错误:
undefined local variable or method `follower' for #<#<Class:0x007fe791a4c8d0>:0x007fe799b14b98>
答案 0 :(得分:4)
这应该有效(指定follower
变量):
<%= render "follower_card", follower: follower %>
无论如何,出于性能原因,我建议您使用collection
渲染。看看这里:http://guides.rubyonrails.org/layouts_and_rendering.html。应该是这样的:
<%= render "follower_card", collection: @user.followers %>
相关问题:Render partial :collection => @array specify variable name
注意强>
将变量传递给partials的旧语法也是有效的(详细,但不太优雅恕我直言):
<%= render partial: "follower_card", locals: { follower: follower } %>
答案 1 :(得分:2)
这是因为您没有将变量传递给partial。部分范围仅限于自身,并且您不会在内部提供关注者。您将不得不使用:
<% @user.followers.each do |follower| %>
<%= render "follower_card", locals: {follower: follower} %>
<% end %>
是正确的方法。
答案 2 :(得分:1)
<%= render "follower_card", follower: follower %>
或
<%= render partial: "follower_card", locals: {follower: follower} %>