2011-08-08 40 views
9

Đối với ứng dụng CRM, tôi muốn có thể liên kết trực tiếp Mô hình người với mô hình Tài khoản hoặc với mô hình Công ty. Ngoài ra, tôi muốn liên kết một mô hình Địa chỉ với một Công ty hoặc một Người. Đây là những gì tôi có trong tâm trí:Mô hình đường ray thuộc về một mô hình hoặc một mô hình khác hoặc

class Account 
    has_many :Persons 
    has_many :Companies 
end 

class Person 
    belongs_to :Account 
    belongs_to :Company 
    has_one :Address 
end 

class Company 
    belongs_to :Account 
    has_many :Persons 
    has_one :Address 
end 

class Address 
    belongs_to :Person 
    belongs_to :Company 
end 

Vì vậy, Tài khoản sẽ là "tài khoản người" hoặc "tài khoản doanh nghiệp" tùy thuộc vào liên kết. Họ sẽ loại trừ lẫn nhau. Tôi có kế hoạch để có các khóa ngoài account_id và company_id trong bảng Person. Theo cùng một mã thông báo, tôi sẽ có các khóa ngoài person_id và company_id trong bảng Address. Một khóa ngoại sẽ là null trong mỗi trường hợp.

Điều này có ổn trong Rails không? Nếu không, mọi khuyến nghị sẽ được đánh giá cao.

+0

bạn có thể sử dụng mô hình xác nhận để đảm bảo rằng chỉ có một loại hiệp hội tồn tại. Không chắc chắn câu trả lời hình ảnh lớn hơn là gì ... – jaydel

Trả lời

8

Hãy xem các liên kết đa hình. Tôi nghĩ rằng đó là những gì bạn đang tìm kiếm: http://guides.rubyonrails.org/association_basics.html#polymorphic-associations

class Account 
    belongs_to :User, :polymorphic => true 
end 

class Person 
    belongs_to :Account, :as => :User 
    belongs_to :Company 
    has_one :Address, :as => :User 
end 

class Company 
    belongs_to :Account, :as => :User 
    belongs_to :Persons 
    has_one :Address, :as => :User 
end 

class Address 
    belongs_to :User, :polymorphic => true 
end 
... 

Greetings Sven

+2

Cảm ơn Sven! Đó chính xác là những gì tôi cần. Chỉ cần đọc về các hiệp hội đa hình trong "The Rails 3 Way". Tôi đánh giá cao sự giúp đỡ của bạn. –

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