Rails - 列出控制器中的所有项目方法

时间:2014-12-22 09:09:29

标签: ruby-on-rails

我需要在一个页面中列出所有草坪,然后在另一个页面中列出我的所有预订。我正在我的控制器中编写一个方法来列出我的数据库中的所有项目,但问题是它在视图中显示1或者它产生继承错误(在视图中)。到目前为止我所拥有的草坪上有很多预订(实际上应该有一个预订)和一个属于草坪的预订,一切都是通过Activeadmin控制的。我得到的错误是

  

未定义的方法`描述'对于   草坪:: ActiveRecord_Relation:0x007f4451b00a58>我已经修改了一点错误,所以它可以显示在这里。

这是我的控制器代码。草坪上有标题和描述,所以我不确定为什么会收到错误。我已经为草坪和预订提供了两种不同的方法,但它们都不起作用。这是我的控制器。

def display_lawns
    @lawn = Lawn.all
  end

  def display_status
    @lawn = Lawn.where("selected = ?", "true")
    @bookings = @lawn.booking
  end

这是我的视图文件似乎不适用于Lawn.all我也有一个类似的视图文件的预订与一些变化。

<h2><%= @lawn.description %></h2>
<ul>
  <% @lawn.bookings.each do |booking| %>
    <li>
      <%= booking.description %>
      <%= button_to "Select", update_booking_path(booking_id: booking), remote: true %>
    </li>
  <% end %>
</ul>

2 个答案:

答案 0 :(得分:0)

一些提示。

而不是

@lawn = Lawn.where("selected = ?", "true")

最好在模型中添加范围。 @lawn是一个对象数组,因此请使用复数。

  def display_lawns
    @lawns = Lawn.all
  end

  def display_status
   @lawns = Lawn.all.where("selected = ?", "true")
  end

@lawns是一个数组,因此您无法使用@lawn.description

如果您需要数组的第一项

@lawn.first.description可以正常工作

<h2><%= @lawns.first.description %></h2>
<ul>
  <% @lawns.each do |lawn| %>
    <li>
      <%= lawn.description %>
      <%= button_to "Select", update_booking_path(booking_id: lawn.booking), remote: true %>
    </li>
  <% end %>
</ul>

答案 1 :(得分:0)

Lawn.allLawn.where(...)返回ActiveRecord::Relation,其中包含多个草坪。

在您看来,您尝试通过@lawn.description显示草坪的描述,但@lawn不是单个草坪对象,而是草坪对象的集合,并且该集合没有描述。

要么只显示一个草坪对象,要么遍历@lawn中的所有对象(并将其重命名为@lawns)。