2013-06-21 9 views
8

mam następujące modele:Nie można odnaleźć Inverse Stowarzyszenie has_many w 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 

Doing business.customers działa dobrze. Jednak po otrzymaniu business.payments pojawia się błąd: Could not find the inverse association for business (:payment in Business).

Nie jestem pewien, dlaczego. Mam te same dokładne skojarzenia w obie strony. Mój schema.db również wygląda dobrze. Co może być tutaj problemem?

EDIT Kiedy usunąć inverse_of => :business dla has_many :payments, to działa. Dlaczego to się dzieje? Czy jest to związane z tą płatnością, która należy do klienta i firmy (tak naprawdę nie powinno to mieć znaczenia, prawda?)?

+0

prawda Aplikować odpowiednie komendy rake do aktualizacji skojarzeń w DB? – wandarkaf

+0

@wandarkaf tak, db: migracja. Stowarzyszenia były tam od kiedy zrobiłem moją pierwszą migrację. Zobacz powyżej edycję. – darksky

Odpowiedz

15

Aktualizacja modelu Płatność z tym:

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

ty oświadczył

has_many :payments, :inverse_of => :business w modelu biznesowym

ale w Płatność użyłeś belongs_to :business, :inverse_of => :payment

powinno być belongs_to :business, :inverse_of => :payments

+0

Dlaczego klient działa? – darksky

+0

Najważniejsze jest to, że musisz użyć odpowiedniej liczby mnogiej dla argumentów inverse_of:. Jeśli jest odwrotnością wielu płatności, użyj: płatności, a nie: płatność. Podobne dla biznesu – Anwar

0

Twój problem jest pod adresem:

belongs_to :business, :inverse_of => :customer 

i adresem:

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

Druga strona belongs_to jest has_many, który określa stosunek liczby mnogiej. Oznacza to, że inverse_of powinien być customers zamiast customer i payments zamiast payment.