Обновить столбец, все строки
Я добавил новый столбец в свою таблицу, но забыл добавить параметр :default. Теперь я хочу заполнить этот столбец в каждой строке.
есть ли способ это сделать с помощью консоли? Я искал google в течение последнего часа, но я ничего не могу найти.
Я знаю, как это сделать для одного объекта, но не для всех в модели. Foo.найти(1).update_attribute (: myattribute, 'value')
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 дополнительные:
конечно, вы можете использовать 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