2013-06-21 11 views
8

を逆協会を見つけることができなかった私は、次のモデルがあります:がレール3にhas_manyのため

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 

は細かいbusiness.customers作品を行います。しかし、私がしたときbusiness.payments私はエラーを受け取ります:Could not find the inverse association for business (:payment in Business)

私はなぜそう思っています。私は両方の方法で同じ正確な関係を持っています。私のschema.dbもうまく見えます。ここで何が問題になるのでしょうか?

EDIT 私はhas_many :paymentsためinverse_of => :businessを削除すると、それが動作します。なぜこれが起こるのですか?それは、支払いが顧客およびビジネスに属することに関連していますか(それは本当に重要ではないでしょうか?) belongs_toのもう一方の側は、複数の関係を規定has_many、ある

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

belongs_to :business, :inverse_of => :customer 

とで:

+0

があなたをしたする必要がありますが、お支払いにあなたはbelongs_to :business, :inverse_of => :payment

を使用

ビジネスモデルに

has_many :payments, :inverse_of => :businessを宣言しました適用するDB内の関連付けを更新するための適切なレーキコマンド? – wandarkaf

+0

@ wandarkafはい、db:migrate。最初のマイグレーションをしたときからの団体がそこにありました。上記の編集をご覧ください。 – darksky

答えて

15

更新支払モデル:

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

は、あなたはそれがbelongs_to :business, :inverse_of => :payments

+0

なぜ顧客は働いていますか? – darksky

+0

主なポイントは、inverse_of:argumentsに適切な複数化を使用する必要があることです。それが多くの支払いの逆である場合は、:支払いではなく、:支払いを使用します。ビジネスと同様 – Anwar

0

あなたの問題は、です。つまり、inverse_ofは、paymentの代わりにcustomerpaymentsではなく、customersである必要があります。これで

関連する問題