Ho rimesso mano a rails installando la 3.1 e sono subito incappato in un
problemino apparentemente molto stupido.
Ho 2 modelli, Bills e Customers in pratica nel modello Bills ho indicato
un campo customer_id che corrisponde ad un oggetto Customer. ora vorrei
che nella Index View di Bills apparisse il nome corrispondente al
customer_id, e recuperando del vecchio codice ho fatto questo:
def index @bills = Bill.all @bills.each do |bill| @customer = Customer.find(bill.customer_id)
end
respond_to do |format|
format.html # index.html.erb
format.json { render json: @bills }
end
Che in rails 2.3 mi funzionava perfettamente, ora invece quando vado ad
aprire l’index nella colonna customer mi restituisce sempre il nome
corrispondente al customer_id dell’ultima riga…
in che cosa sbaglio?
sicuro che sulla 2.3 funziona esattamente con questo codice?
quando vai a iterare tutte le Bill, ogni volta sovrascrivi la variabile @customer, quindi naturale che @customer ritorni solo l’ultimo record
che hai
iterato.
non c’ bisogno di farlo, nella view ti baster fare questo:
<% @bills.each do |bill| %>
…
<%= bill.customer.name %>
…
<% end %>
e naturalmente nella action del controller, ti baster fare:
@bills = Bill.all
ciao,
A.
Il 09/09/2011 18:12, Luca C. ha scritto:
def index @bills = Bill.all @bills.each do |bill| @customer = Customer.find(bill.customer_id)
end
…
Si, non era granchè come codice quello di quel programma… ma almeno
funziona ancora così.
Cmq ora provo in questo modo…
Grazie
Andrea P. wrote in post #1020994:
sicuro che sulla 2.3 funziona esattamente con questo codice?
quando vai a iterare tutte le Bill, ogni volta sovrascrivi la variabile @customer, quindi naturale che @customer ritorni solo l’ultimo record
che hai
iterato.
non c’ bisogno di farlo, nella view ti baster fare questo:
<% @bills.each do |bill| %>
…
<%= bill.customer.name %>
…
<% end %>
e naturalmente nella action del controller, ti baster fare:
@bills = Bill.all
ciao,
A.
Il 09/09/2011 18:12, Luca C. ha scritto:
def index @bills = Bill.all @bills.each do |bill| @customer = Customer.find(bill.customer_id)
end
…
quindi c’è quaclosa che non torna… ora mi cerco un pò di
documentazione…
Andrea P. wrote in post #1020994:
sicuro che sulla 2.3 funziona esattamente con questo codice?
quando vai a iterare tutte le Bill, ogni volta sovrascrivi la variabile @customer, quindi naturale che @customer ritorni solo l’ultimo record
che hai
iterato.
non c’ bisogno di farlo, nella view ti baster fare questo:
<% @bills.each do |bill| %>
…
<%= bill.customer.name %>
…
<% end %>
e naturalmente nella action del controller, ti baster fare:
@bills = Bill.all
ciao,
A.
Il 09/09/2011 18:12, Luca C. ha scritto:
def index @bills = Bill.all @bills.each do |bill| @customer = Customer.find(bill.customer_id)
end
…
Si infatti è quello che mi sono andato a leggere per bene
Quello che sbagliavo era un semplice typo dovuto a distrazione
scrivevo belongs_to :customers
Duilio R. wrote in post #1021493:
Ciao Luca,
come ha detto Andrea, devi specificare le relazioni nei model.
class Customer < ActiveRecord::Base
has_many :bills
end
class Bill < ActiveRecord::Base
belongs_to :customer
end
Ti consiglio di dare uno sguardo alle guide ufficiali: