导轨呈现局部有:收集(Rails render partial with :collection)

2019-08-04 02:49发布

这是如此简单,它不应该是一个问题,但我不明白什么怎么回事。

我有以下代码

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

Answer 1:

这是一个老问题,但只是别人的情况下用它挣扎

当部分是带一个多元化的集合,则部分的各个实例具有经由部分命名的变量被呈现对集合的访问的部件。

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

在从OP上面的例子中,由于部分被称为booking代替bookings ,滑道是失败来推断部件的名字在部分,因此需要将用于明确地将它作为as: :booking



Answer 2:

您的通话渲染比什么是指南中显示的不同。 你试过render :partial => 'booking', :collection => @bookings

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



文章来源: Rails render partial with :collection