在其父类中初始化时自动转换活动记录子类

时间:2016-11-21 22:52:27

标签: ruby-on-rails ruby ruby-on-rails-5

我有一个Subscription模型,然后有子类SubscriptionCleaning,订阅有一个subscription_type_id,其中1是SubscriptionCleaning。我也有一个SubscriptionType模型。

我想要发生的事情就是当我这样做时

Subscription.find(100) 订阅类型ID为1

自动转换SubscriptionCleaning

我已尝试在订阅类

上执行初始化方法
after_initialize :my_test
#
def my_test
    if self.subscription_type_id.present?
        self.becomes!('SubscriptionCleaning'.constantize)
    end
end

NoMethodError的这个错误:未定义的方法`type ='对

我可以在控制台中逐行完成,但它返回正常但不是订阅的初始化

有没有人对如何让它发挥作用有任何想法?

1 个答案:

答案 0 :(得分:0)

查看单表继承,该列由type列解析。 http://api.rubyonrails.org/classes/ActiveRecord/Base.html#class-ActiveRecord::Base-label-Single+table+inheritance

<强>更新

该链接不是很有用。简短说明,您可以删除subscription_type_id列并添加type列。如果您创建了一个模型SubscriptionCleaning < Subscription,它将与Subscription模型保持在同一列中,并且您可以获得开箱即用的“类型转换”。