将字段添加到迁移表后,方法值为“ nil”,而不是“ true”或“ false”

问题描述

我在我的schema.rb文件中的“成员”表中添加一个名为“ custom_design_enabled”的字段,作为认值为true的布尔值。当我尝试在Rails控制台中更改此设置时,它说该字段为“ nil”,而不是“ true”或“ false”。我认为迁移过程中有一部分我不小心省略了,这为方法“ custom_design_enabled”提供了一个值。有人可以帮我吗?

解决方法

这很可能发生,因为您没有在新字段中指定默认值。解决此问题的最简单方法是创建新迁移。创建一个新的迁移文件(rails g migration change_custom_design_enabled_default),然后在迁移文件中尝试以下操作:

def up
  change_column :members,:custom_design_enabled,:boolean,default: true
end

def down
  change_column :members,default: nil
end

或者,您可以尝试使用rake db:rollback回滚上一次迁移,并将null: false,default: true添加到原始迁移的add_column方法中。如果生成的迁移使用的是change而不是updown,这可能会失败,并且rails无法弄清楚如何撤消它,但是值得一试。

更新:如果回滚不起作用,则可以将原始迁移更改为:

def up
  add_column :members,:boolean
end

def down
  remove_column :members,:custom_design_enabled
end

然后执行rake db:rollback