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

这是一个老问题,但以防万一其他人正在努力解决这个问题

当使用复数集合调用 partial 时,partial 的各个实例可以通过以 partial 命名的变量访问正在呈现的集合的成员。

来自http://guides.rubyonrails.org/layouts_and_rendering.html

在上面来自 OP 的示例中,因为调用了 partialbooking而不是bookings,Rails 无法推断要在 partial 中使用的成员名称,因此需要将其显式传递为as: :booking

于 2014-10-13T23:04:11.820 回答
4

您对渲染的调用与指南中显示的不同。你试过render :partial => 'booking', :collection => @bookings吗?

我相信假设您在 Rails 3 或更高版本中,您也应该能够使用较短的替代方案:render @bookings.

于 2012-12-14T03:31:50.563 回答