更新一列,所有行

我添加了一个新的列到我的表,但我忘了添加:默认选项。 现在我想在每一行填充该列。

有没有办法使用控制台? 我在过去的一个小时里一直在search谷歌,但是我找不到任何东西。

我知道如何做一个单一的对象,但不是所有的模型。 Foo.find(1).update_attribute(:myattribute,'value')

尝试这个:

Foo.update_all(some_column: "bar") 

这将生成对数据库的SQL查询:

 UPDATE "foos" SET "some_column" = "bar"; 

既然您已经在之前的迁移中创build了新的字段,请创build一个全新的迁移:

 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 

让我知道如果这个工作,它可能需要一些调整。 看更多的铁轨文件 :

你可以这样做:

Foo.update_all(new_column:“bar”)

当然,你可以像Foo.update_all(:myattribute => "value")那样使用smth,但是它只会修改已经创build的数据。 为所有“未来”数据设置默认值,这是创build一个单独的迁移像这样一个好方法:

 rails generate migration AddDefaultValueToFoo 

修改新的迁移(例如,myattribute具有stringtypes),如下所示:

 class AddDefaultValueToFoo < ActiveRecord::Migration def self.up change_column :foos, :myattribute, :string, :default => "value" Foo.update_all(:myattribute => "value") end end