来自多态模型的单个记录可以同时属于两个(或更多)模型吗?
Can a single record from a polymorphic model belong to two (or more) models at the same time?
一般新手问题:如果我有一个名为 Message
的多态模型,以及另外两个名为 Filter
和 User
的模型,两者都具有 has_many: messages, as ...
关联。 Message
中的一条记录可以同时属于 User
和 Filter
模型吗?例如,我可以这样做:
...
User.find(1).messages << Message.find(1)
Filter.find(1).messages << Message.find(1)
...
并在 User#1
和 Filter#1
中提供 Message#1
? RailsGuides gives a very brief explanation,所以这方面我还不清楚。
是的,你可以。假设一条消息有所有者(可以是用户或其他 class)和处理者(可以是过滤器或其他 class)
然后在消息 table 中,您需要列:owner_id, owner_type, processor_id, processor_type
。
classes 应该看起来像:
class Message
belongs_to :owner, polymorphic: true
belongs_to :processor, polymorphic: true
end
class User
has_many :messages
end
class Filter
has_many :messages
end
但是,为了使消息同时属于两个模型,您需要执行以下操作:
Message.create(owner: User.find(1), processor: Filter.find(1))
# or like this
User.find(1).messages << Message.create(processor: Filter.find(1))
一般新手问题:如果我有一个名为 Message
的多态模型,以及另外两个名为 Filter
和 User
的模型,两者都具有 has_many: messages, as ...
关联。 Message
中的一条记录可以同时属于 User
和 Filter
模型吗?例如,我可以这样做:
...
User.find(1).messages << Message.find(1)
Filter.find(1).messages << Message.find(1)
...
并在 User#1
和 Filter#1
中提供 Message#1
? RailsGuides gives a very brief explanation,所以这方面我还不清楚。
是的,你可以。假设一条消息有所有者(可以是用户或其他 class)和处理者(可以是过滤器或其他 class)
然后在消息 table 中,您需要列:owner_id, owner_type, processor_id, processor_type
。
classes 应该看起来像:
class Message
belongs_to :owner, polymorphic: true
belongs_to :processor, polymorphic: true
end
class User
has_many :messages
end
class Filter
has_many :messages
end
但是,为了使消息同时属于两个模型,您需要执行以下操作:
Message.create(owner: User.find(1), processor: Filter.find(1))
# or like this
User.find(1).messages << Message.create(processor: Filter.find(1))