Могу ли я редактировать поля в базе данных, используя рельсовую миграцию? - PullRequest
0 голосов
/ 17 июня 2011

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

У меня вопрос, могу ли я использовать миграцию рельсов для этого? Редактировать все поля в столбце и обновлять их? Как это будет выглядеть?

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

Заранее спасибо!

1 Ответ

1 голос
/ 17 июня 2011

Конечно, у вас есть два варианта. 1) Вы можете написать код ActiveRecord в миграциях так же, как и в модели, например ::10000

class ChangeDomainName < ActiveRecord::Migration
  def self.up
    YourModel.update_all "url = REPLACE(url, 'www.old-domain-name.com', 'www.new-domain-name.com')"
  end

  def self.down
    # ...
  end
end

В этом сценарии следует помнить одну вещь: если вы меняете, например, Имена столбцов или типы в той же миграции до update_all необходимо сделать YourModel.reset_column_information после изменения таблицы и перед вызовом для нее методов ActiveRecord.

2) Вы можете использовать сырой SQL с методом execute:

def self.up
  execute "UPDATE your_models SET url = REPLACE(url, 'www.old-domain-name.com', 'www.new-domain-name.com)"
end

Лично я предпочитаю первый метод.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...