14

これはとても単純なので問題にはならないはずですが、ここで何が起こっているのかわかりません。

私は次のコードを持っています

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

何が起きてる?ここで定義されているように:collectionを本当に使用したい http://guides.rubyonrails.org/layouts_and_rendering.html

4

2 に答える 2

19

これは古い質問ですが、他の人がそれに苦労している場合に備えて

パーシャルが複数形のコレクションで呼び出されると、パーシャルの個々のインスタンスは、パーシャルにちなんで名付けられた変数を介してレンダリングされるコレクションのメンバーにアクセスできます。

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

上記のOPの例では、のbooking代わりにパーシャルが呼び出されたためbookings、Railsはパーシャルで使用されるメンバー名を推測できなかったため、明示的に次のように渡す必要があります。as: :booking

于 2014-10-13T23:04:11.820 に答える
4

レンダリングの呼び出しは、ガイドに示されているものとは異なります。試しましたrender :partial => 'booking', :collection => @bookingsか?

Rails 3以降を使用している場合は、より短い代替手段も使用できるはずですrender @bookings

于 2012-12-14T03:31:50.563 に答える