2015-10-27 3 views
5

Aşağı doğru. Bir kişinin birçok teklifi olabilir, bu özel kişi yalnızca bir teklifi vardır. Benim endeks eylem olarakTanımsız yöntem her Ruby

ben kişi teklifler için indeks görünümü zaman zaman ziyaret ben NoMethodError: undefined method each' for #<Bid:0x007f988a346f00> alıyorum

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

yapmak bana göre

@bids = Bid.find_by_person_id(params[:person_id]) var.

Bu kişi yalnızca bir teklifi olduğundan bu mu? Ben bu durumda değil hissediyorum, bunun dışında bir im kaybettim ..

+0

Bunun nil olsa da olmadığını biliyorum. Doğrulamak için hata ayıkladım. – Seal

+0

tek bir kayıt üzerinde yineleyemezsiniz arkadaşım – illusionist

cevap

12

find_by ilk öğeyi döndürür. Sana

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

ahhh haklı olduğunuzu düşünüyorum – Seal

+0

İyi çağrı, ben mümkün olduğunda kabul edeceğim. – Seal

2

Austio 'ın cevabını arıyoruz doğru olduğunu düşünüyorum.

Ancak, neden doğrudan Bid modeli arıyorsun? ...

bir kişi Açıkçası kişi modelinden veri inşa ediyoruz birçok teklifler

sahip olabilir, yani neden aşağıdakileri aramayın:

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

where.

Elbette, yönteminiz yalnızca bir db sorgusu kullanır. Ama yine de, yukarıdakiler çok daha sezgisel.

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

bir teklifi gayet olması, ancak hiçbiri neden olur haiz: -

bir kenara

, ayrıca döngü önce bir koşul kullanmak isteyeceksiniz bir hatayı dışarı çıkarmak için döngü. Yukarıdakiler bu sorunu çözmektedir.

+0

Bu doğru değil: "Bir teklifin iyi olması, ancak hiçbirinin olmaması, döngünün hata vermesine neden olacaktır." Boş bir koleksiyonda "her" nin çağrılması bir hata yapmaz. – Mischa

+0

Boş bir koleksiyonda aradığımda benim için yapar. –

+0

Hayır değil. Varsayalım: '@bids = Bid.where (: id => [olmayan-varolan-id])' dır, sonra bu herhangi bir hata atmaz: '@ bids.each {| bid | ...} '. – Mischa