2

Rails のバージョンは 3.2.8 で、デフォルトのデータベースを使用しています。これは私の移行コードです:

class AddQuantityToLineItem < ActiveRecord::Migration
  def change
    add_column :line_items, :quantity, :integer,:default=>1
  end
end

ここで :default オプションについての説明を見つけました。それが言ったように、新しい LineItem を作成するとき、デフォルトの数量 = 1 にする必要がありますが、Rails コンソールから取得したものは次のとおりです。

lineb=LineItem.new
#<LineItem id: nil, product_id: nil, cart_id: nil, created_at: nil, updated_at: nil, quantity: nil>

そして、データベースから LineItem を取得すると、数量フィールドも nil になります。

そして、ここに db/schema.rb があります:

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

  create_table "carts", :force => true do |t|
    t.datetime "created_at", :null => false
    t.datetime "updated_at", :null => false
  end

  create_table "line_items", :force => true do |t|
    t.integer  "product_id"
    t.integer  "cart_id"
    t.datetime "created_at", :null => false
    t.datetime "updated_at", :null => false
    t.integer  "quantity"
  end

  create_table "products", :force => true do |t|
    t.string   "title"
    t.text     "description"
    t.string   "image_url"
    t.decimal  "price",       :precision => 8, :scale => 2
    t.datetime "created_at",                                :null => false
    t.datetime "updated_at",                                :null => false
  end

end
4

1 に答える 1

4

移行は正常に機能するはずです。t.integer "quantity"デフォルト値がないため、実際には有効になっていないように見えますが、スキーマに基づいています。

のスキーマの行は次のquantityようになります。

t.integer  "quantity",   :default => 1

実際に移行を実行したことを確認し(bundle exec rake db:migrate)、それが機能しない場合は、ロールバック(bundle exec rake db:rollback)して、移行を再度実行します(@ surase.prasadが提案したように)。

于 2012-10-08T09:29:57.887 に答える