Rails ActiveRecord不遵守布尔默认值

时间:2013-03-03 00:44:43

标签: ruby-on-rails ruby activerecord

我有一个带有draft_record布尔列的用户模型,其默认值为true。创建记录时,它们是使用draft_record创建的:false而不是true。当字段被称为草稿时,这种方式起作用,然后草稿关联和草稿属性分配方法发生冲突,导致草案属性无法设置。难道我做错了什么?我以前遇到过这个问题,只是通过恢复到有效的方法来解决这个问题。

Ruby:1.9.3-p327

Ruby on Rails:3.2.12

DBMS:Postgres

相关迁移:

class AddDraftColumnToUsers < ActiveRecord::Migration
  def self.up
    add_column :users, :draft_record, :boolean, default: true
    add_column :users, :draft_id, :integer
    add_column :users, :current_id, :integer
  end

  def self.down
      ...
  end
end

结果架构

ActiveRecord::Schema.define(:version => 20130303002123) do

  create_table "users", :force => true do |t|
    t.datetime "created_at",                     :null => false
    t.datetime "updated_at",                     :null => false
    t.string   "name"
    t.boolean  "draft_record", :default => true
    t.integer  "draft_id"
    t.integer  "current_id"
  end

end

创建用户对象:

Loading development environment (Rails 3.2.12)
1.9.3-p327 :001 > u = User.create(name: "Jon")
   (0.0ms)  begin transaction
  SQL (28.8ms)  INSERT INTO "users" ("created_at", "current_id", "draft_id", "draft_record", "name", "updated_at") VALUES (?, ?, ?, ?, ?, ?)  [["created_at", Sun, 03 Mar 2013 00:42:04 UTC +00:00], ["current_id", nil], ["draft_id", nil], ["draft_record", false], ["name", "Jon"], ["updated_at", Sun, 03 Mar 2013 00:42:04 UTC +00:00]]
   (0.7ms)  commit transaction
 => #<User id: 1, created_at: "2013-03-03 00:42:04", updated_at: "2013-03-03 00:42:04", name: "Jon", draft_record: false, draft_id: nil, current_id: nil> 
1.9.3-p327 :002 > 

2 个答案:

答案 0 :(得分:3)

此问题是由条件哈希设置为default_scope的{​​{1}}引起的。这会强制通过活动记录添加任何记录,以将draft_record: false设置为false。

答案 1 :(得分:0)

默认值设置为DB级别。因此,插入查询不会生成默认值。如果设置了正确的默认值,请检查插入的记录。