【问题标题】:Can a single record from a polymorphic model belong to two (or more) models at the same time?多态模型中的一条记录可以同时属于两个(或更多)模型吗?
【发布时间】:2015-01-21 17:27:30
【问题描述】:

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

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

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

【问题讨论】:

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


    【解决方案1】:

    是的,你可以。假设一条消息具有所有者(可以是用户或其他类)和处理器(可以是过滤器或其他类) 然后在消息表中,您将需要列: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))
    

    【讨论】:

    • 不错的解决方案,但我很好奇:polymorphic: true 声明是否必要?除了删除polymorphic: true 之外,它是否仍然不能与所有相同的代码一起工作?
    • @Bazley, polymorphic: true 如果UserFilter 类是唯一可以是ownerprocessorMessage 实例的类,则不需要。当我回答这个问题时,我的印象是,消息的所有者可以是另一个类,例如 Admin 或其他任何类型,您可以拥有不同类型的 Filter 类。
    猜你喜欢
    • 2017-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-12
    相关资源
    最近更新 更多