2013-03-03 61 views
0

我有一個用戶模型draft_record布爾列,其默認爲true。在創建記錄時,它們使用draft_recordfalse而不是true創建。當該字段被稱爲草稿時,這起作用,然而,草稿關聯和草稿屬性分配方法發生衝突,導致草稿屬性不可設置。難道我做錯了什麼?之前我遇到過這個問題,只是通過恢復工作來解決這個問題。軌道ActiveRecord不尊重布爾默認

紅寶石: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 > 
+0

您是否有任何回調函數將草稿記錄保存到數據庫之前? – jvnill 2013-03-03 03:10:05

+0

保存前沒有設置draft_record的回調。 – 2013-03-03 10:11:19

回答

3

此問題是由default_scope造成的,條件散列設置爲draft_record: false。這強制通過活動記錄添加任何記錄以將draft_record設置爲false。

0

默認值設置爲數據庫級別。所以插入查詢將不會生成默認值。檢查插入的記錄是否有正確的默認值設置。

+0

插入的記錄沒有設置。 – 2013-03-03 10:10:08

+0

嘗試生成** change_default(:draft_record,true)的另一個遷移** – Monis 2013-03-03 20:43:29