代码之家  ›  专栏  ›  技术社区  ›  anquegi

在rubyonrails中混合多态关联与STI或MTI

  •  0
  • anquegi  · 技术社区  · 4 年前

    在实现多态关联之后,我遇到了一个问题或困境 this :所有代码都位于 here ,

    我已经实现了这个模型:

    model

    假设我还需要订阅杂志。它也将是类似于其他两个

    class Magazines < ApplicationRecord
      has_many :subscriptions, as: :subscribable
    end
    
    class User < ApplicationRecord
      has_many :subscriptions
      has_many :podcasts, through: :subscriptions, source: :subscribable, source_type: 'Podcast'
      has_many :newspapers, through: :subscriptions, source: :subscribable, source_type: 'Newspaper'
      has_many :magazines, through: :subscriptions, source: :subscribable, source_type: 'Newspaper'
    end
    
    class Subscription < ApplicationRecord
      belongs_to :subscribable, polymorphic: true
      belongs_to :user
    end
    

    杂志订阅,播客订阅和报纸订阅。三者具有相同的属性和行为,但属于不同的模型。如果这样做之后,我需要订阅类的某种MTI或STI,会发生什么呢。i、 杂志订阅有不同的行为,也许还有其他属性。有一种简单的方法可以满足这个新的需求,比如创建一个订阅类来处理所有多态关联和其他模型:

    class Subscription < ActiveRecord::Base
      self.inheritance_column = :sti_subscription
      belongs_to :subscribable, polymorphic: true
      belongs_to :user
    
    
      def _type=(sType)
         sti_subscrition = sType.to_s.classify.constantize.base_class.to_s + "Subscription"
         super(sType.to_s.classify.constantize.base_class.to_s)
      end
    end
    
    class MagazineSubscription < Subscription
      # new behaviour here
    end
    

    this Subscription类处理两个多态关系,subscriptable及其后代 所以我的问题是,当我使用多态关联是设置STI或MTI的一种简单方法,或者我需要一种新的方法

    0 回复  |  直到 4 年前
    推荐文章