当我创建一个局部并在视图中渲染它时,里面的变量不会被识别。
如果我把所有内容放在视图中,一切都会好的。但如果我使用部分,我会收到此错误:
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 %>
答案 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