Обновить столбец, все строки

Я добавил новый столбец в свою таблицу, но я забыл добавить параметр по умолчанию. Теперь я хочу заполнить этот столбец на каждой строке.

Есть ли способ использовать консоль? Я искал Google в течение последнего часа, но ничего не могу найти.

Я знаю, как это сделать для одного объекта, но не для всех в модели. Foo.find(1).update_attribute (: myattribute, 'value')

Ответ 1

Попробуйте следующее:

Foo.update_all(some_column: "bar")

Это приведет к генерации SQL-запроса в базу данных:

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

Ответ 2

Поскольку вы уже создали новое поле в предыдущей миграции, создайте новый перенос:

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

Сообщите мне, если это будет работать, возможно, потребуется несколько корректировок. Подробнее см. Рельсы docs:

Ответ 3

вы можете сделать вот так:

Foo.update_all (new_column: "bar" )

Ответ 4

Конечно, вы можете использовать smth, как 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