我有这样的事情:
class AddTestToPeople < ActiveRecord::Migration
def change
add_column :people, :status, :string, default: "normal"
end
end
class Person < ActiveRecord::Base
validates_inclusion_of :status, in: [ "normal", "super" ]
end
... status
的默认"normal"
值在创建新记录时未通过验证。我想我可以放弃默认值,但我很好奇为什么这不起作用。有人可以开导我吗?
答案 0 :(得分:1)
Default
值在数据库中设置。
当您尝试在people
表中插入记录并将status
属性设置为nil
时,只有默认值normal
将插入数据库中{ {1}}列。
如果在保存新记录时没有将任何值传递给status
属性,则其值将为零。因此,验证不会通过。 status
只能设置为&#34; normal&#34;在插入记录时。
我建议你修改模型如下,数据库会处理默认值:
Status
或者
如Danny建议的那样,第二个选项是设置after_initialize回调,并在未指定时设置默认值class Person < ActiveRecord::Base
validates_inclusion_of :status, in: [ "super" ], allow_nil: true
end
。如果您使用此选项,那么我不认为您需要DB级别的默认值,因为状态字段始终从Model设置。
status