rails add_column 具有默认值但默认值不生效
Posted
技术标签:
【中文标题】rails add_column 具有默认值但默认值不生效【英文标题】:rails add_column with default value but the default value don't take effect 【发布时间】:2012-10-08 09:10:17 【问题描述】:我的 rails 版本是 3.2.8 并使用默认数据库。 这是我的迁移代码:
class AddQuantityToLineItem < ActiveRecord::Migration
def change
add_column :line_items, :quantity, :integer,:default=>1
end
end
I find a explaination about :default option here 正如它所说,当我创建一个 new 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
【问题讨论】:
回滚迁移并重新运行。 我遇到了类似的问题。我在迁移中有两个“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 建议的那样)。
【讨论】:
以上是关于rails add_column 具有默认值但默认值不生效的主要内容,如果未能解决你的问题,请参考以下文章
PostgreSQL:在 Rails 迁移中使用 add_column "after" 选项