变量在内部偏差时不会被识别

时间:2014-10-16 13:33:45

标签: ruby-on-rails variables

当我创建一个局部并在视图中渲染它时,里面的变量不会被识别。

如果我把所有内容放在视图中,一切都会好的。但如果我使用部分,我会收到此错误:

undefined local variable or method `photo' for #<#<Class:0x0000010981db20>:0x000001089681e8>

我试图将@放在“照片”前面,但仍然说:

undefined method `photo_url' for nil:NilClass

Rails有没有办法实现这个目标?

我的观点

    <% @photos.each do |photo| %>
        <%= render partial: "spot_box" %>
    <% end %>

我的部分

    <%= link_to spot_path(photo) do %>
        <%= image_tag photo.photo_url(:thumb), class: "" %>
        <%= photo.title.truncate(30).downcase.capitalize %>
        <%= photo.user.name.truncate(10) %> |  <%= photo.pins.count %> Productos etiquetados
    <% end %>

2 个答案:

答案 0 :(得分:3)

尝试:

<%= render partial: "spot_box", locals: { photo: photo } %>

顺便说一下,你可以直接做到:

render partial: 'spot_box', collection: @photos, as: :photo

而不是在@photos

上循环播放

有关部分here

的更多信息

答案 1 :(得分:0)

如果你有一个集合想要渲染相同的部分,你也可以替换这个

<% @photos.each do |photo| %>
    <%= render partial: "spot_box" %>
<% end %>

<%= render partial: "spot_box", collection: @photos, as: :photo %>

“as”选项告诉rails在partial中调用集合的每个成员的内容,它必须与在partial中使用的变量名相同。它默认为partial的名称,因此如果您没有传递as: :photo,那么集合的每个成员都将保存在名为spot_box的变量中。

请参阅http://api.rubyonrails.org/classes/ActionView/PartialRenderer.html