我正在开发一个项目,其中许多 ActiveRecord 模型都可以进行与之关联的对话。用户可以讨论网站的几乎所有方面。关于如何实施,我有两个想法。
1)在资产中使用belongs_to,而不是对话——对话将完全不知道它的资产
class Product< ActiveRecord::Base
belongs_to :conversation
end
class PurchaseOrder < ActiveRecord::Base
belongs_to :conversation
end
2) 在对话中使用belongs_to, :polymorphic => true
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
建模这种关系的正确方法是什么?如果我要陈述这种关系,我会说“一个产品/采购订单可能有一个对话”。