更新一列,所有行
我添加了一个新的列到我的表,但我忘了添加:默认选项。 现在我想在每一行填充该列。
有没有办法使用控制台? 我在过去的一个小时里一直在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