如何将变量传递给partials?

时间:2014-12-18 16:11:29

标签: ruby-on-rails partial

我有一个常见的问题,通常我会用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>

3 个答案:

答案 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} %>