2012-12-14 193 views
11

這是如此簡單,它不應該是一個問題,但我不明白這裏發生了什麼。Rails渲染部分:集合

我有以下代碼

class DashboardController < ApplicationController 
    def bookings 
     @bookings = Booking.all 
    end 
end 

/views/dashboard/bookings.html.erb

<%= render 'booking', :collection => @bookings %> 

/views/dashboard/_booking.html.erb

<%= booking.booking_time %> 

我收到以下錯誤

undefined method `booking_time' for nil:NilClass 

但是,如果我這樣做是/views/dashboard/_bookings.html.erb

<% @bookings.each do |booking| %> 
    <%= render 'booking', :booking => booking %> 
<% end %> 

我得到(正確)

2012-12-19 09:00:00 UTC 
2012-12-28 03:00:00 UTC 

怎麼回事請告訴我?我真的想要使用:這裏定義的集合 http://guides.rubyonrails.org/layouts_and_rendering.html

回答

13

這是一個老問題,但只是情況下,其他人用它

當一個部分是帶一個多元化的集合掙扎,那麼局部的 個別情況下有機會獲得 集合的成員通過部分之後命名的變量呈現

http://guides.rubyonrails.org/layouts_and_rendering.html

在從OP上面的例子中,由於局部被稱爲的booking代替bookings,滑道是失敗來推斷部件的名字來在部分,因此需要用於傳遞它明確作爲as: :booking

+0

這應該是被接受的答案! –

4

您的渲染調用與指南中顯示的不同。你有沒有試過render :partial => 'booking', :collection => @bookings

我相信你應該也可以使用較短的選擇,假設你在Rails 3或更高版本中:render @bookings

+0

謝謝。是的,我已經嘗試渲染:partial =>'booking',:collection => @bookings - 但它是相同的 – 32423hjh32423

+7

奇怪的是,添加:as =>:預訂到渲染調用改變什麼? – cbascom

+4

':as =>:booking'爲我解決了這個問題,我想它並沒有用任何軌道魔法來推斷集合中的單數名稱。 – omnikron