Ответ 1
Попробуйте следующее:
Foo.update_all(some_column: "bar")
Это приведет к генерации SQL-запроса в базу данных:
UPDATE "foos" SET "some_column" = "bar";
Я добавил новый столбец в свою таблицу, но я забыл добавить параметр по умолчанию. Теперь я хочу заполнить этот столбец на каждой строке.
Есть ли способ использовать консоль? Я искал Google в течение последнего часа, но ничего не могу найти.
Я знаю, как это сделать для одного объекта, но не для всех в модели. Foo.find(1).update_attribute (: myattribute, 'value')
Попробуйте следующее:
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:
вы можете сделать вот так:
Foo.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