我想知道多态关联是什么(在数据建模意义上),因为我知道它们很常见,我想学习如何在Rails中实现它们。
< p>该术语是否描述了例如的情况
? (这些实现总是有点棘手)。
一旦我知道 ,我就会准备好在这里研究问题和答案关于第二个问题: 如何 在Rails中 实施 。
希望这是这个论坛的范围不太远......我的最终目标是学习Rails实现的多态关联。
答案 0 :(得分:1)
通过主键/外键创建常规关联。
User "Bob", id: 1
Book "The Sponge", id: 1, user_id: 1
外键user_id
是指用户的主键。
多态关联适用于主键/外键,以及对象的“类型”:
User "Bob", id: 1
Book "The Sponge", id: 1, owner_id: 1, owner_type: "User"
在这里,我们需要两个字段来检索图书的所有者:
我们知道所有者的ID是1,而所有者的类型(类)是“用户”,所以让我们找到id = 1的用户!
这意味着您可以拥有多种类型的所有者: poly (多个) - morphic (类型,类)
例如,您可以拥有一个由Client对象拥有的Book:
Client "XXX", id: 12
Book "Catalog", id: 2, owner_id: 12, owner_type: "Client" # => owner is client #12
Book "Anoying", id: 3, owner_id: 20, owner_type: "User" # => owner is user #20
如何在Rails框架中实现多态关联:
class Book < ActiveRecord::Base
belongs_to :owner, polymorphic: true
end
class User < ActiveRecord::Base
has_many :books, as: :owner
end
class Client < ActiveRecord::Base
has_many :books, as: :owner
end
然后你可以找到一本书的主人,其中包含以下几行:
book = Book.first
book.owner # => return the owner of the book, can be either Client or User
答案 1 :(得分:0)
以下是Rails中的一个示例,其中包含更简单的模型名称:
class Comment
belongs_to :commentable, polymorphic: true
end
class Article
has_many :comments, as: :commentable
end
class Photo
has_many :comments, as: :commentable
end
我认为这种关系在这里是自我解释的。有关多态和Rails的更多信息here。