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

Ответ 1

Это старый вопрос, но только случай, когда другие борются с ним

Когда частичное вызывается с плюрализованной коллекцией, тогда отдельные экземпляры части имеют доступ к члену коллекция отображается через переменную, названную после частичного.

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

В приведенном выше примере из OP, потому что частичный был вызван booking вместо bookings, Rails не смог определить имя члена, которое будет использоваться в частичном, следовательно, необходимо передать его явно как as: :booking

Ответ 2

Ваш вызов для визуализации отличается от того, что показано в руководстве. Вы пробовали render :partial => 'booking', :collection => @bookings?

Я считаю, что вы также должны использовать более короткую альтернативу, предполагая, что вы находитесь в Rails 3 или новее: render @bookings.