2015-10-27 18 views
5

Il run down. Una persona può avere molte offerte, questa persona in particolare ha solo un'offerta.Metodo non definito ogni Ruby

Nella mia azione index devo @bids = Bid.find_by_person_id(params[:person_id])

a mio avviso che faccio

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

sto ottenendo NoMethodError: undefined method each' for #<Bid:0x007f988a346f00> quando si rechino vista indice di gara persona.

È perché questa persona ha solo un'offerta? Sento che non è il caso, ma a parte quello im in perdita ..

+0

So che non è nullo però. Ho eseguito il debug per verificare. – Seal

+0

non si può iterare su un singolo record il mio amico – illusionist

risposta

12

find_by restituisce il primo elemento. Penso che si sta cercando

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

ahhh penso che abbiate ragione – Seal

+0

Buon invito, accetterò quando posso. – Seal

2

Austio 's risposta è corretta.

Tuttavia, il motivo per cui stai chiamando il modello Bid direttamente? ...

Una persona può avere molte offerte

Stai ovviamente costruendo dati dal modello persona, così perché non chiamare il seguente:

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

Questo costruisce la collezione senza chiamare where.

Naturalmente, il metodo utilizza solo una singola query db. Ma anche così, quanto sopra è molto più intuitivo.

-

Per inciso, si potrà anche utilizzare un condizionale prima del ciclo:

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

Avere uno offerta va bene, ma avendo nessuno farà sì che il loop per sputare un errore. Quanto sopra risolve quel problema.

+0

Questo non è vero: "Avere una offerta va bene, ma non averne nessuno farà sì che il loop sputi un errore." Chiamare 'each' su una raccolta vuota non sputerà un errore. – Mischa

+0

Fa per me ogni volta che l'ho chiamato su una collezione vuota. –

+0

No, non lo è. Supponi: '@bids = Bid.where (: id => [non-esistente-id])' allora questo non genera errori: '@ bids.each {| bid | ...} '. – Mischa