在我的架构中说我有一个带有宠物属性字段的用户表,默认为["狗"]:
create_table "users", force: true do |t|
...
t.text "pets", default: ["dogs"], array: true
...
我有一个继承自FriendlyUser
课程的模型User
:class FriendlyUser < User
因此,当创建FriendlyUser
时,类型为&#34; FriendlyUser&#34;。但我希望FriendlyUser
将宠物设置为狗和猫的默认值:[&#34;狗&#34;,&#34;猫&#34;]
迁移是否可行,或者必须在课程中完成(通过覆盖initialize
方法,使用after_initialize
,before_create
等)?
答案 0 :(得分:1)
Rails迁移中的默认值不是用来处理这样的逻辑。从数据库方面来说,可能技术上可能使用触发器根据类型列中的值填充插入数据,但这可能比它更麻烦和复杂。值得。
设置before_validation
回调中的值可能是您最好的选择。由于您使用了继承,因此可以覆盖子类中的回调。
答案 1 :(得分:1)
由于STI将一个表用于多个模型,因此数据库层中的默认值将使您的模型更难以具有不同的特征。因此,我认为您应该坚持将默认值逻辑移动到您可以定义模型特定行为的应用程序逻辑。