使用SQLite运行Rails 3.2.8(来自rubyonrails.org上当前dl的基本设置)
如果我有几个模型,我想要一个属性为“notes”,所有“notes”都是String,那么是否只有一个特定的Note模型,所有其他模型都引用了Note模型?
或
每个模型是否必须为“注释”设置自己的属性?
如果第一个响应,这是否意味着对于引用“注释”的每个关系,我是否需要创建另一个定义:through
关系的类? (即tableOne,tableTwo和tableThree所有引用注释,然后我需要创建其他类tableOne_notes,tableTwo_notes和tableThree_notes)
多态解决方案是否适用?
答案 0 :(得分:3)
如果你想要一个'notes'模型可以为许多其他模型提供相同的目的,那么这将是一种多态关系。 无论应用程序框架如何,这都是正确的。
在本例的rails实现多态关系的特定情况下,您将添加
note_type
Notes模型/表和Note模型中的列,使用数据库迁移加上:
belongs_to :notable, :polymorphic => true
在Note
中,然后
has_many notes, :as => notable`
在其他需要笔记的模型中。
有关详情,请参阅http://guides.rubyonrails.org/association_basics.html#polymorphic-associations。
频繁使用多态关系:
答案 1 :(得分:0)
这取决于您的需求。但基本上可以创建模型Notice
并在1-n
和Notice
以及Other
之间创建Other2
关系......
据我了解您的问题,只有1-n
或多个1-n
关系才有意义。如果您为每个表添加一列notes
,则每个数据行只能有一个注释。另一个定义:through
的类不是1-n
关系所必需的。