0

draft_recordデフォルトのブール列を持つユーザーモデルがありますtrue。レコードを作成するとき、それらは.ではなくdraft_record:で作成されます。これは、フィールドがドラフトと呼ばれたときに機能しましたが、ドラフトの関連付けとドラフト属性の割り当てメソッドが衝突し、ドラフト属性が設定できなくなりました。私は何か間違ったことをしていますか?私は以前にこの問題を抱えていましたが、機能したものに戻すことで回避しました。falsetrue

ルビー: 1.9.3-p327

ルビーオンレール: 3.2.12

DBMS: ポストグル

関連する移行:

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 > 
4

2 に答える 2

3

この問題はdefault_scope、条件ハッシュが に設定されている が原因で発生しましたdraft_record: false。これにより、アクティブなレコードを介して追加されたレコードが強制的draft_recordに false に設定されました。

于 2013-03-08T04:12:42.327 に答える
0

デフォルト値は DB レベルで設定されます。したがって、挿入クエリはデフォルトを生成しません。挿入されたレコードに正しいデフォルト値が設定されているかどうかを確認してください。

于 2013-03-03T01:54:21.530 に答える