Rails 3.1 mostrare nome anzichè id in una index view

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

end
e nell’index.html.erb ho messo:

<% @bills.each do |bill| %>

<%= @customer.name %> <%= bill.invoice_number %> <%= bill.invoice_date %> <%= bill.description %> <%= bill.amount %> <%= link_to 'Show', bill %> <%= link_to 'Edit', edit_bill_path(bill) %> <%= link_to 'Destroy', bill, confirm: 'Are you sure?', method: :delete %> <% 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?

Non pi semplice

def index
respond_with @bills
end

e nella view

<% @bills.each do |bill| %>

<%= bill.customer.name %> <%= bill.invoice_number %> ...

?

Il giorno 09/set/2011, alle ore 18:12, Luca C. ha scritto:

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

Uhmm così facendo mi esce un bel

undefined method `customer’

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

controlla i model, hai specificato le relazioni tra customer e bill?

Il 12/09/2011 18:28, Luca C. ha scritto:

Si infatti è quello che mi sono andato a leggere per bene :slight_smile:
Quello che sbagliavo era un semplice typo dovuto a distrazione
scrivevo belongs_to :customers

:stuck_out_tongue:

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:

http://guides.rubyonrails.org/

soprattutto le guide sulle Active Record Associations

Active Record Associations — Ruby on Rails Guides

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:

soprattutto le guide sulle Active Record Associations