在实现多态关联之后,我遇到了一个问题或困境
this
:所有代码都位于
here
,
我已经实现了这个模型:
假设我还需要订阅杂志。它也将是类似于其他两个
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的一种简单方法,或者我需要一种新的方法