2009-11-07 1 views
1

다음과 같은 시나리오를 통해 레일스 어플리케이션을위한 가장 좋은 방법을 모델링하고 싶습니다.이 레일즈 관계를 모델링하는 가장 좋은 방법

나는 회사에 소속 된 연락처 모델이 있습니다. 연락처로 문의 할 수 있으므로 많은 문의가있을 수 있습니다. 조회에는 많은 대화 상대와의 많은 메시지가있을 수 있습니다. 메시지는 질의, 회사 또는 연락처에 속할 수 있습니다.

이렇게 모델을 작성하는 방법에 대해 혼란 스럽습니다. 어떤 아이디어?

안부,

리차드 모스

답변

0

혼란 오히려 다른 부분보다 메시지에처럼 소리.

나는 문의, 회사 및 연락처 각각에 대해 belongs_to로 가고 싶습니다 (문의 사항이없는 메시지가 있다고 가정합니다). 그런 다음 적어도 하나가 지정되었는지 확인하기 위해 사용자 지정 유효성 검사를 수행 할 것입니다. 그러나 그렇지 않은 경우 validate_presence_of를 사용하지 마십시오.

도우미 방법은 주어진 메시지가 연관되어있는 것을 찾는 고통을 덜어 줄 수 있으므로이 3 가지 관계 각각을 검사 할 필요가 없습니다.

2

많은 다른 모델에 속할 수 있기 때문에 Message은이 경우 polymorphic이어야합니다. 대화 상대가 다른 대화 상대에게 메시지를 보낼 수 있기 때문에 Contact은 메시지가있는 두 개의 연결을 가지며, 하나는 sent_messages이고 다른 하나는 received_messages입니다. Messagecontact_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도 통찰력이 있어야합니다.