2012-10-08 102 views
1

我的rails版本是3.2.8並使用默認數據庫。 這是我的移民代碼:rails add_column具有默認值但默認值不生效

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

I find a explaination about :default option here和它說,當我創建一個 新的LineItem,它應該有一個默認數量= 1,但這裏是我從鐵軌控制檯中看到:

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

而且,當我從數據庫中獲取LineItem時,數量字段也是零 。

這裏是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 
+0

回滾遷移並重新運行。 –

+0

我有類似的問題。我在遷移中有兩個「change_column」語句,第二個語句對模式沒有任何影響。,對我而言,我的兩個「change_column」語句分爲兩個遷移。 –

回答

1

您應該遷移工作正常。根據你的模式,儘管它看起來並沒有真正起作用,因爲t.integer "quantity"沒有默認值。

在架構quantity行應該是這樣的:

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

確保您已實際運行遷移(bundle exec rake db:migrate),如果不工作,然後回滾(bundle exec rake db:rollback),然後運行再次遷移(如@ surase.prasad建議)。

+0

是的,回滾和再次遷移,它的工作,謝謝 – xsj0jsx