0

많은 ActiveRecord 모델과 관련된 대화를 할 수있는 프로젝트를 진행 중입니다. 사용자는 사이트의 모든면을 토의 할 수 있습니다. 이것이 어떻게 구현되어야하는지에 대한 두 가지 아이디어가 있습니다.RoR :이 시나리오에서 belongs_to, : polymorphic을 사용해야합니까?

1), 자산에없는 대화를 belongs_to를 사용 - 대화가 자산

class Product< ActiveRecord::Base 
    belongs_to :conversation 
end 

class PurchaseOrder < ActiveRecord::Base 
    belongs_to :conversation 
end 

2) 전혀 모르고있을 것입니다 belongs_to를 사용 : 다형성 => 사실을 대화에

class Conversation < ActiveRecord::Base 
    belongs_to :asset, :polymorphic => true 
end 

class Product < ActiveRecord::Base 
    has_one :conversation, :as => :asset 
end 

class PurchaseOrder < ActiveRecord::Base 
    has_one :conversation, :as => :asset 
end 

이 관계를 모델링하는 올바른 방법은 무엇입니까? 관계를 진술하면 "제품/구매 주문서에는 하나의 대화가있을 수 있습니다"라고 말하고 싶습니다.

답변

0

나는 관계에있는 한 모델이 다른 모델에 대해 알아야 할 필요가 있다고 생각합니다. 당신의 묘사에서 두 번째 접근이이 경우에 더 적합하다는 것이 나에게 보인다. 왜?

  • ProductPurchaseOrder 모델은 그들에 대해 대화에서 떨어져 존재할 수 있다는 점에서 자기 contrained 엔티티입니다. 따라서 외래 키가 이러한 모델을 오염시키는 것을 대화에 두는 것을 원하지 않을 것입니다. 그 의미에서 그 관계는 눈에 거슬리지 않아야합니다.
  • Conversation은 그래서는 asset_id (및 asset_type) 외래 키를 가지고 있으며, 그 아마이 항상 나에게로 중지가 매우 일반적인 질문입니다

합리적인와 연관된 엔티티에 논리적 종속성이 조금 생각 해봐. 항상 명확한 것은 아닙니다. 문제를 고려한 좋은 기사가 있습니다. here

+0

좋은 답변입니다. 귀하의 통찰력에 감사드립니다. –

관련 문제