2012-12-14 2 views
11

Dies ist so einfach, es sollte kein Problem sein, aber ich verstehe nicht, was hier los ist.Schienen rendern teilweise mit: Sammlung

Ich habe den folgenden Code

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

Ich erhalte den folgenden Fehler

undefined method `booking_time' for nil:NilClass 

Allerdings, wenn ich dies tun in /views/dashboard/_bookings.html.erb

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

ich (richtig)

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

Was geht hier vor? Ich möchte wirklich verwenden: Sammlung wie hier definiert http://guides.rubyonrails.org/layouts_and_rendering.html

Antwort

13

Dies ist eine alte Frage, aber nur kämpfen Fall andere damit

Wenn ein teilweise mit einer Pluralisierung Sammlung genannt wird, dann wird die einzelne Instanzen des Teils haben Zugang zum Mitglied der Sammlung gerendert wird über eine Variable nach dem Teil benannt.

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

In dem obigen Beispiel aus dem OP, weil der Teil booking statt bookings genannt wurde, Rails versagt den Mitgliedsname abzuleiten, um damit zu passieren die Notwendigkeit, in der teilweise verwendet werden, um es ausdrücklich als as: :booking

+0

Dies sollte die akzeptierte Antwort sein! –

4

Ihr Aufruf zu rendern ist anders als was in der Anleitung angezeigt wird. Haben Sie versucht render :partial => 'booking', :collection => @bookings?

Ich glaube, Sie sollten auch in der Lage sein, die kürzere Alternative zu verwenden, vorausgesetzt, Sie sind in Rails 3 oder später: render @bookings.

+0

Danke. yea ich habe versucht zu rendern: partially => 'booking',: collection => @bookings - aber es ist das selbe – 32423hjh32423

+7

Odd, fügt hinzu: as =>: booking zum render call irgendetwas ändern? – cbascom

+4

': as =>: booking' hat das für mich behoben, ich schätze es macht keinen rails magic, um den singulären Namen aus der Sammlung abzuleiten. – omnikron