我有以下(简化的)模型和迁移:
模型:
class User < ActiveRecord::Base
attr_readonly :contacted
validates :contacted, :inclusion => { :in => [true, false] }
def set_contacted
self.contacted = true
end
def unset_contacted
# self.contacted = false
self.contacted = "0"
end
end
移民:
class CreateUsers < ActiveRecord::Migration
def change
create_table :users do |t|
t.boolean :contacted, :null => false, :default => false
t.timestamps
end
end
end
正如您在我的模型中的评论中看到的那样,将变量设置contact
为 false 会导致错误 - 我只能将其设置为“0”。为什么?我看不出“假”如何违反空约束,对吧?
编辑: 为澄清起见,我使用的是 PostgreSQL 和 ActiveRecord。我得到的错误是这样的:
C:/Ruby193/lib/ruby/gems/activerecord-3.2.8/lib/active_record/validations.rb:56:in 'save!' Validation failed: ActiveRecord::RecordInvalid)
即使我从模型中删除“验证”语句,即使我从迁移中删除 NULL 约束,我也会收到该错误。这与将属性的值设置为 false 有关。ActiveRecord 布尔值是否有一些奇怪的约束?