2012-12-14 18 views
11

To jest takie proste, że nie powinno to być problemem, ale nie rozumiem co tu się dzieje.Szyny renderowe częściowe z: kolekcją

Mam następujący kod

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

Pojawia się następujący błąd:

undefined method `booking_time' for nil:NilClass 

Jeśli jednak zrobić to w /views/dashboard/_bookings.html.erb

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

otrzymuję (poprawne)

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

Co tu się dzieje? Naprawdę chcę użyć: kolekcja zdefiniowana tutaj http://guides.rubyonrails.org/layouts_and_rendering.html

Odpowiedz

13

To stara sprawa, ale tylko przypadek inni walczą z nim

Po częściowym nazywa się liczbę mnogą kolekcji, a następnie indywidualne przypadki częściowego mieć dostęp do członka kolekcji jest renderowany za pośrednictwem zmiennej o nazwie częściowej.

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

W przykładzie z PO, ponieważ częściowe nazwano booking zamiast bookings, szyny został braku wywnioskować nazwę użytkownika do zastosowania w częściowym, stąd konieczność przechodzą to jednoznacznie jako as: :booking

+0

To powinna być zaakceptowana odpowiedź! –

4

Twoje połączenie renderowania różni się od tego, co pokazano w przewodniku. Czy próbowałeś już render :partial => 'booking', :collection => @bookings?

Uważam, że powinieneś być również w stanie użyć krótszej alternatywy, zakładając, że jesteś w Rails 3 lub późniejszym: render @bookings.

+0

Dzięki. tak próbowałem render: partial => 'booking',: collection => @bookings - ale jest to ten sam – 32423hjh32423

+7

Nieparzysty, czy dodanie: as =>: booking do wywołania renderowania coś zmienić? – cbascom

+4

': as =>: booking' naprawił to dla mnie, domyślam się, że to nie robi żadnej magii szyn, aby wywnioskować pojedynczą nazwę z kolekcji. – omnikron

Powiązane problemy