2013-06-21 31 views
8

tôi có các mô hình sau:Không thể Tìm Hội Inverse cho has_many trong 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 

Làm business.customers hoạt động tốt. Tuy nhiên, khi tôi làm business.payments Tôi gặp lỗi: Could not find the inverse association for business (:payment in Business).

Tôi không chắc chắn lý do tại sao. Tôi có cùng một hiệp hội chính xác cả hai cách. Schema.db của tôi cũng có vẻ ổn. Điều gì có thể là vấn đề ở đây?

EDIT Khi tôi xóa inverse_of => :business cho has_many :payments, nó hoạt động. Lý do tại sao điều này xảy ra? Có liên quan đến việc thanh toán đó thuộc về khách hàng và doanh nghiệp (nó không thực sự quan trọng, phải không?)?

+0

đã làm bạn áp dụng lệnh cào thích hợp để cập nhật các liên kết trong DB? – wandarkaf

+0

@wandarkaf có, db: di chuyển. Các hiệp hội đã có từ khi tôi đã di chuyển đầu tiên của tôi. Vui lòng xem phần chỉnh sửa ở trên. – darksky

Trả lời

15

Cập nhật mô hình thanh toán với điều này:

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

bạn tuyên bố

has_many :payments, :inverse_of => :business trong mô hình kinh doanh

nhưng trong thanh toán bạn sử dụng belongs_to :business, :inverse_of => :payment

nó phải được belongs_to :business, :inverse_of => :payments

+0

Tại sao Khách hàng hoạt động? – darksky

+0

Điểm chính là bạn phải sử dụng số nhiều thích hợp cho inverse_of: arguments. Nếu nó là nghịch đảo của nhiều khoản thanh toán, sử dụng: thanh toán, không: thanh toán. Tương tự cho doanh nghiệp – Anwar

0

Vấn đề của bạn là:

belongs_to :business, :inverse_of => :customer 

và tại địa chỉ:

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

Mặt khác của belongs_tohas_many, trong đó xác định một mối quan hệ nhiều. Điều đó có nghĩa là inverse_of phải là customers thay vì customerpayments thay vì payment.

Các vấn đề liên quan