2014-10-16 58 views
0

當我創建一個部分並在視圖中渲染時,內部變量不會被識別。當部分內部變量不會被識別

如果我把所有東西放在視圖中,一切都會好的。但是,如果使用的部分,我得到這個錯誤:

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 %> 

回答

3

嘗試:

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

通過就可以直接做的方式:

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

,而不是循環在你的諧音@photos

更多信息here

0

您還可以,如果你有一個集合要呈現的相同部分,更換此

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

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

「as」選項告訴導軌如何調用部分內部集合的每個成員,它需要與部分內部使用的變量名相同。它默認爲部分的名稱,所以如果您未通過as: :photo,那麼收集的每個成員將被保存在名爲spot_box的變量中。

請參閱http://api.rubyonrails.org/classes/ActionView/PartialRenderer.html

相關問題