Rails渲染部分:收集

时间:2012-12-14 02:57:14

标签: ruby-on-rails-3.2

这很简单,不应该是一个问题,但我不明白这里发生了什么。

我有以下代码

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

2 个答案:

答案 0 :(得分:15)

这是一个古老的问题,但其他人正在努力解决这个问题

  

当使用复数集合调用partial时,则   部分的个别实例可以访问该成员   通过以部分命名的变量呈现集合。

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

在上面的示例中,由于部分被称为booking而不是bookings,因此Rails未能推断出要在部分中使用的成员名称,因此需要传递它显式为as: :booking

答案 1 :(得分:4)

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

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