2015-10-27 25 views
5

実行が停止しました。人は多くの入札をすることができますが、この特定の人は単価が1つだけです。私は未定義のメソッドそれぞれRuby

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

を行い、私は私の見解で@bids = Bid.find_by_person_id(params[:person_id])

を持っている私のindexアクションで

者の入札のためのインデックスビューを来場とき、私はNoMethodError: undefined method each' for #<Bid:0x007f988a346f00>を取得しています。

この人は単価が1つだけなので、これはですか?私はそうではないと感じますが、それ以外は紛失しています。

+0

私はそれが無縁ではないことを知っています。私は確認するためにデバッグしました。 – Seal

+0

あなたは1つのレコードを繰り返し処理することはできません。 – illusionist

答えて

12

find_byは最初の項目を返します。私はあなたが

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

あなたは正しいと思います。 – Seal

+0

できればそれを受け入れます。 – Seal

2

Austioの答えが正しいかを探していると思います。

しかし、なぜあなたは直接Bidモデルを呼び出している?...

人はあなたが明らかにモデルからのデータを構築している多くの入札

を持つことができるので、次のように呼び出してください:

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

これは、呼び出しを行わずにコレクションを構築します。 where

もちろん、あなたのメソッドは1つのdbクエリしか使用しません。しかし、それでもなお、上記ははるかに直感的です。

-

さておき、あなたもあなたのループの前に、条件を使用したいと思うとおり:

1件の入札は結構ですが、 どれを有していないことが発生しますを持つ
<% if @bids.any? %> 
    <% @bids.each.... %> 
<% end %> 

ループを実行してエラーを吐き出す上記の問題を解決します。

+0

これは当てはまりません。「入札単価が上がっても問題はありませんが、何もないとエラーが発生します。」空のコレクションに対して 'each'を呼び出すことはエラーを吐き出しません。 – Mischa

+0

私は空のコレクションで呼び出すたびに私のためですか? –

+0

いいえ、そうではありません。 '@bids = Bid.where(:id => [non-existing-id])'とすると、エラーは発生しません。 '@ bids.each {| bid | ...} '。 – Mischa

関連する問題