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
.