每个Ruby

时间:2015-10-27 02:06:59

标签: ruby-on-rails ruby activerecord

失败了。一个人可以有很多出价,这个特定的人只有一个出价。

在我的索引操作中,我有@bids = Bid.find_by_person_id(params[:person_id])

在我看来我做了

<% @bids.each do |bid| %>
   <%= bid.bid_amount %>
<% end %>

我在访问人员出价的索引视图时收到NoMethodError: undefined method each' for #<Bid:0x007f988a346f00>

这是因为这个人只有一个出价吗?我觉得情况并非如此,但除此之外我不知所措。

2 个答案:

答案 0 :(得分:12)

find_by返回第一项。我想你正在寻找

Bid.where(person_id: params[:person_id])

答案 1 :(得分:2)

Austio的回答是正确的。

但是,为什么要直接调用Bid模型?...

  

一个人可以有很多出价

您显然是从 person 模型构建数据,为什么不调用以下内容:

@person = Person.find params[:person_id]
@bids = @person.bids #-> bids belong to @person

这将构建集合而不调用where

当然,您的方法仅使用单个数据库查询。但即使如此,上述内容也更为直观。

-

顺便说一句,你还想在循环之前使用条件:

<% if @bids.any? %>
   <% @bids.each.... %>
<% end %>

一个出价很好,但是 none 会导致循环吐出错误。以上解决了这个问题。