当只找到一条记录时,ActiveRecord不返回迭代

时间:2010-02-15 02:05:42

标签: ruby-on-rails

这可能很简单,但我开始使用rails。

我有以下声明:

@subjects = Cartitem.find_by_cid(session[:customerid])

在我的视图中,我有一些像这样的代码:

<% @subjects.each do |d| %>
 <tbody>
  <tr>

当上述查询返回多行时,一切正常。但是,当上面的查询只返回一行时,我的视图中出现错误,说明方法each未定义。

避免这种情况的方法是什么?我的观点中是否需要if/else

1 个答案:

答案 0 :(得分:3)

可能

@subjects = Cartitem.find_all_by_cid(session[:customerid])

将起作用,因为Rails文档说,你给的那行:

@subjects = Cartitem.find_by_cid(session[:customerid])

实际上会打电话:

Cartitem.find(:first, :conditions => ["cid = ?", session[:customerid]])

我不认为to_a(由user141146提到)的解决方案根本不起作用,因为正在返回的对象不是任何类型的QuerySet的实例(例如在Django中),而是纯模型因此它可能根本没有这种方法。