2014-12-18 4 views
0

У меня есть общая проблема, которую я обычно решал с помощью 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> 

ответ

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

Примечание

Старый синтаксис для передачи переменных частичными также справедливо (многословным, но менее элегантно IMHO):

<%= render partial: "follower_card", locals: { follower: follower } %> 
2

Это потому, что вы не передаете переменную частичной. Объем частичного ограничения ограничивается самим собой, и вы не делаете его доступным внутри. Вам необходимо будет использовать:

<% @user.followers.each do |follower| %> 
     <%= render "follower_card", locals: {follower: follower} %> 
    <% end %> 

Правильно.

1
<%= render "follower_card", follower: follower %> 

или

<%= render partial: "follower_card", locals: {follower: follower} %> 
Смежные вопросы