Ruby on rails Rails中子类属性的默认值

Ruby on rails Rails中子类属性的默认值,ruby-on-rails,Ruby On Rails,假设在我的模式中有一个users表,其属性字段为pets,默认为[“dogs”]: 我有一个从classUser继承的模型FriendlyUser:class-FriendlyUser

假设在我的模式中有一个users表,其属性字段为pets,默认为[“dogs”]:

我有一个从class
User
继承的模型
FriendlyUser
class-FriendlyUser

因此,当创建
FriendlyUser
时,类型为“FriendlyUser”。但是我想
FriendlyUser
将宠物设置为默认的狗和猫:[“狗”,“猫”]


这在迁移中是可能的,还是必须在类中完成(通过重写
初始化
方法,在初始化之后使用
,在创建之前使用
,等等)?

Rails迁移中的默认值不打算处理这样的逻辑。从数据库方面看,在技术上可以使用触发器根据type列中的值填充insert上的数据,但这可能会带来更多的麻烦和复杂性


在验证前在
回调中设置值可能是最好的选择。由于您使用的是继承,您可以覆盖子类中的回调。

由于STI对多个模型使用一个表,数据库层中的默认值将使您的模型更难具有不同的特征。因此,我认为您应该坚持将默认值逻辑移动到您的应用程序逻辑中,在那里您可以定义特定于模型的行为

create_table "users", force: true do |t|
    ...
    t.text    "pets",     default: ["dogs"],    array: true
    ...