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

Я думаю, это зависит от того, что, если что-либо, одна модель в отношениях должна знать о другой. Мне кажется, из вашего описания, что второй подход в этом случае более уместен. Зачем?

  • Модель Product и PurchaseOrder являются самостоятельным contrained лица в том смысле, что они могут существовать отдельно от разговоров о них. Таким образом, вы, вероятно, не хотите, чтобы внешние ключи, загрязняющие эти модели, применялись при разговорах. В этом смысле отношения должны быть ненавязчивыми.
  • Conversation имеет логическую зависимость от сущности он связан с так он имеет asset_idasset_type) внешние ключи, и это, вероятно, разумно

Это очень общий вопрос, и один, который всегда меня останавливаясь подумайте немного. Это не всегда очевидно. Есть хорошая статья, рассматривающая вопрос here

+0

Отличный ответ. Спасибо за понимание. – 2010-07-15 19:09:16

Смежные вопросы