我向表中添加了一個新列,但我忘記添加:default選項。現在我想在每一行填充該列。更新列,所有行
有沒有辦法使用控制檯?我過去一小時一直在谷歌搜索,但找不到任何東西。
我知道如何做一個單一的對象,但不是所有的模型。 Foo.find(1).update_attribute(:myattribute, '值')
我向表中添加了一個新列,但我忘記添加:default選項。現在我想在每一行填充該列。更新列,所有行
有沒有辦法使用控制檯?我過去一小時一直在谷歌搜索,但找不到任何東西。
我知道如何做一個單一的對象,但不是所有的模型。 Foo.find(1).update_attribute(:myattribute, '值')
試試這個:
Foo.update_all(some_column: "bar")
這將生成SQL查詢數據庫:
UPDATE "foos" SET "some_column" = "bar";
既然你已經創建在先前遷移的新領域中,創建全新遷移:
rails g migration UpdateFoos
莫迪fy遷移:
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
讓我知道這是否有效,它可能需要一些調整。見軌docs更多:
,你可以這樣做:
Foo.update_all(NEW_COLUMN: 「巴」)
當然你可以使用像水木清華Foo.update_all(:myattribute => "value")
,但它」只會修改已經創建的數據。要爲所有的「未來」的數據設置默認值是創建這樣一個單獨的遷移一個好辦法:像這樣
rails generate migration AddDefaultValueToFoo
修改的新移民(爲前myattribute有一個字符串類型):
class AddDefaultValueToFoo < ActiveRecord::Migration
def self.up
change_column :foos, :myattribute, :string, :default => "value"
Foo.update_all(:myattribute => "value")
end
end
你想爲每一行分配相同的值還是不同? – 2010-12-22 19:06:47
所有的值相同。謝謝 – 2010-12-22 19:08:54
好的,@petrov。你可以試試update_all方法 – 2010-12-22 19:15:27