在其父 class 中初始化时自动投射活动记录子 class
Automatically cast an active record child class on initialisation in its parent class
我有一个订阅模型,它有子 class SubscriptionCleaning,订阅有一个 subscription_type_id,其中 1 是 SubscriptionCleaning。我还有一个 SubscriptionType 模型。
我想要发生的是当我做的时候
Subscription.find(100)
其订阅类型 ID 为 1
自动施放 SubscriptionCleaning
我试过对我的订阅进行初始化方法class
after_initialize :my_test
#
def my_test
if self.subscription_type_id.present?
self.becomes!('SubscriptionCleaning'.constantize)
end
end
此错误与 NoMethodError: undefined method `type=' for
我可以在控制台中逐行执行它 returns 很好但不能作为订阅的初始化
有人对如何让它发挥作用有任何想法吗?
看一下Single table 继承,由type
列解决。 http://api.rubyonrails.org/classes/ActiveRecord/Base.html#class-ActiveRecord::Base-label-Single+table+inheritance
更新:
link 不是很有用。简短说明,您可以删除 subscription_type_id
列并添加 type
列。如果您创建一个模型 SubscriptionCleaning < Subscription
,它将保留在与 Subscription
模型相同的列中,并且您可以开箱即用 "type casting"。
我有一个订阅模型,它有子 class SubscriptionCleaning,订阅有一个 subscription_type_id,其中 1 是 SubscriptionCleaning。我还有一个 SubscriptionType 模型。
我想要发生的是当我做的时候
Subscription.find(100)
其订阅类型 ID 为 1
自动施放 SubscriptionCleaning
我试过对我的订阅进行初始化方法class
after_initialize :my_test
#
def my_test
if self.subscription_type_id.present?
self.becomes!('SubscriptionCleaning'.constantize)
end
end
此错误与 NoMethodError: undefined method `type=' for
我可以在控制台中逐行执行它 returns 很好但不能作为订阅的初始化
有人对如何让它发挥作用有任何想法吗?
看一下Single table 继承,由type
列解决。 http://api.rubyonrails.org/classes/ActiveRecord/Base.html#class-ActiveRecord::Base-label-Single+table+inheritance
更新:
link 不是很有用。简短说明,您可以删除 subscription_type_id
列并添加 type
列。如果您创建一个模型 SubscriptionCleaning < Subscription
,它将保留在与 Subscription
模型相同的列中,并且您可以开箱即用 "type casting"。