多态模型中的单个记录可以同时属于两个(或更多)模型吗?

时间:2015-01-21 17:27:30

标签: ruby-on-rails activerecord polymorphism polymorphic-associations

一般新手问题:如果我有一个名为Message的多态模型,以及另外两个名为FilterUser并且两者都有has_many: messages, as ...关联的模型。 Message的单个记录可以同时属于UserFilter型号吗?例如,我可以这样做:

...
User.find(1).messages << Message.find(1)
Filter.find(1).messages << Message.find(1)
...

并在Message#1User#1中提供Filter#1RailsGuides gives a very brief explanation,所以这个方面对我来说还不清楚。

1 个答案:

答案 0 :(得分:4)

是的,你可以。假设一条消息拥有所有者(可以是User或其他类)和处理器(可以是Filter或其他类) 然后在消息表中,您将需要列:owner_id, owner_type, processor_id, processor_type。 类应该看起来像:

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))