2015-10-27 28 views
5

跑下来。一个人可以有很多出价,这个人只有一个出价。未定义的方法每个红宝石

在我的索引行动我有@bids = Bid.find_by_person_id(params[:person_id])

在我看来,我做

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

visting的人出价索引视图时,我得到NoMethodError: undefined method each' for #<Bid:0x007f988a346f00>

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

+0

我知道它不是零。我调试验证。 – Seal

+0

你不能迭代一个记录我的朋友 – illusionist

回答

12

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

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

ahhh我认为你是对的 – Seal

+0

好的呼吁,我会尽我所能接受。 – Seal

2

Austio的答案是正确的。

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

一个人可以有很多投标

你显然从模型构建的数据,所以为什么不呼叫以下内容:

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

这将生成未调用的集合where

当然,您的方法只使用单个数据库查询。但即使如此,以上更直观。

-

顺便说一句,你还需要你的循环之前使用条件:

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

一个竞价是好的,但有没有将导致循环吐出一个错误。以上解决了这个问题。

+0

这不是真的:“有一个出价很好,但没有一个会导致循环吐出一个错误。”在空集合上调用'each'不会产生错误。 – Mischa

+0

对我来说,只要我在空集合上调用它就可以了。 –

+0

不,它不。假设:'@bids = Bid.where(:id => [non-existing-id])'那么这不会引发任何错误:'@ bids.each {| bid | ''。 – Mischa

相关问题