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


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

есть ли способ это сделать с помощью консоли? Я искал google в течение последнего часа, но я ничего не могу найти.

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

4 63

4 ответа:

попробуйте это:

Foo.update_all(some_column: "bar")

это создаст SQL-запрос к базе данных:

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

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

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 дополнительные:

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

Фу.update_all (new_column: "bar")

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