2013-06-21 13 views
8

Ho i seguenti modelli:Impossibile trovare Inverse Associazione per has_many in Rails 3

class Business < ActiveRecord::Base 
    has_many :customers, :inverse_of => :business 
    has_many :payments, :inverse_of => :business 
end 

class Customer < ActiveRecord::Base 
    belongs_to :business, :inverse_of => :customer 
    has_many :payments, :inverse_of => :customer 
end 

class Payment < ActiveRecord::Base 
    belongs_to :customer, :inverse_of => :payment 
    belongs_to :business, :inverse_of => :payment 
end 

Facendo business.customers funziona bene. Tuttavia, quando faccio business.payments viene visualizzato un messaggio di errore: Could not find the inverse association for business (:payment in Business).

Non so perché. Ho le stesse identiche associazioni in entrambi i modi. Anche il mio schema.db sembra a posto. Quale potrebbe essere il problema qui?

EDIT Quando ho rimuovere il inverse_of => :business per has_many :payments, funziona. Perché succede? È legato al fatto che il pagamento appartiene al cliente e al business (non dovrebbe essere importante, vero?)?

+0

avete fatto applicare il comandi di rake adeguati per aggiornare le associazioni nel DB? – wandarkaf

+0

@wandarkaf yes, db: migrate. Le associazioni erano lì da quando ho fatto la mia prima migrazione. Si prega di vedere sopra modifica. – darksky

risposta

15

Aggiornamento Modello di pagamento con questo:

class Payment < ActiveRecord::Base 
    belongs_to :customer, :inverse_of => :payments 
    belongs_to :business, :inverse_of => :payments 
end 

si dichiarò

has_many :payments, :inverse_of => :business nel modello di business

ma in pagamento da te utilizzata belongs_to :business, :inverse_of => :payment

dovrebbe essere belongs_to :business, :inverse_of => :payments

+0

Perché il Cliente sta lavorando? – darksky

+0

Il punto principale è che è necessario utilizzare la pluralizzazione corretta per inverse_of: arguments. Se è inverso di molti pagamenti, usa: pagamenti, non: pagamento. Simile per il business – Anwar

0

tuo problema e ':

belongs_to :business, :inverse_of => :customer 

ea:

belongs_to :customer, :inverse_of => :payment 
belongs_to :business, :inverse_of => :payment 

L'altro lato belongs_to è has_many, che definisce una relazione plurale. Ciò significa che lo inverse_of deve essere customers anziché customer e payments anziché payment.

Problemi correlati