我在表格中添加了一个新列,但是我忘了添加:default选项。现在我想在每一行填充该列。
有没有办法使用控制台?我一直在谷歌搜索过去的一小时但我找不到任何东西。
我知道如何为单个对象执行此操作,但对模型中的所有对象都不知道。 Foo.find(1).update_attribute(:myattribute,'value')
答案 0 :(得分:130)
试试这个:
Foo.update_all(some_column: "bar")
这将生成对数据库的SQL查询:
UPDATE "foos" SET "some_column" = "bar";
答案 1 :(得分:25)
由于您已在先前的迁移中创建了新字段,因此请创建全新的迁移:
rails g migration UpdateFoos
修改迁移:
def self.up
say_with_time "Updating foos..." do
Foo.find(:all).each do |f|
f.update_attribute :myattribute, 'value'
end
end
end
# from command line
Rake db:migrate
如果有效,请告诉我,可能需要进行一些调整。有关更多信息,请参阅rails docs:
答案 2 :(得分:3)
Foo.update_all(new_column:“bar”)
答案 3 :(得分:2)
当然你可以像Foo.update_all(:myattribute => "value")
一样使用smth,但它只会修改已创建的数据。要为所有“未来”数据设置默认值,这是创建单独迁移的好方法:
rails generate migration AddDefaultValueToFoo
修改新迁移(例如my.proattribute有一个字符串类型),如下所示:
class AddDefaultValueToFoo < ActiveRecord::Migration
def self.up
change_column :foos, :myattribute, :string, :default => "value"
Foo.update_all(:myattribute => "value")
end
end