많은 다른 모델에 속할 수 있기 때문에 Message
은이 경우 polymorphic이어야합니다. 대화 상대가 다른 대화 상대에게 메시지를 보낼 수 있기 때문에 Contact
은 메시지가있는 두 개의 연결을 가지며, 하나는 sent_messages
이고 다른 하나는 received_messages
입니다. Message
은 contact_id
을 통해 발신자에게 연결됩니다.
class Contact < ActiveRecord::Base
belongs_to :company
has_many :enquiries
has_many :sent_messages, :class_name => "Message"
has_many :received_messages, :as => :messageable, :class_name => "Message"
end
class Company < ActiveRecord::Base
has_many :contacts
has_many :messages, :as => :messageable
end
class Enquiry < ActiveRecord::Base
belongs_to :contact
has_many :messages, :as => :messageable
end
class Message < ActiveRecord::Base
belongs_to :contact
belongs_to :messageable, :polymorphic => true
end
이것은 관계 요구 사항을 잘 모델링해야합니다. 더 잘 이해하려면 Railscast on Polymorphic Associations도 통찰력이 있어야합니다.