Обновление базы данных с помощью файла миграции - PullRequest
0 голосов
/ 15 декабря 2011

У меня есть простая пользовательская таблица, и я хотел бы добавить новое поле в мою пользовательскую таблицу с надписью Постоянная ссылка.Эта постоянная ссылка будет обновлена ​​следующим кодом для всех пользователей name.downcase.gsub(/[^0-9a-z]+/, ' ').strip.gsub(' ', '-').Я хочу создать файл миграции, который обновляет все поля постоянных ссылок пользователей с помощью приведенного выше кода, чтобы у старых пользователей была установлена ​​постоянная ссылка, и я использовал бы метод after_create для новых пользователей.

1 Ответ

0 голосов
/ 15 декабря 2011

Я думаю, вы могли бы попробовать что-то вроде этого:

class User < ActiveRecord::Base

  before_create :set_permalink

  def set_permalink
    permalink = name.downcase.gsub(/[^0-9a-z]+/, ' ').strip.gsub(' ', '-') 
  end
end

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

И в вашем файле миграции ...

class UpdateUsersPermalink < ActiveRecord::Migration

  def self.up
    User.reset_column_information
    User.all.each do |u|
      if u.permalink.nil?
        u.set_permalink
        u.save!
      end
    end
  end

  ...
end

.., который позаботится о любых существующих User s, которые не имеют этогополе установлено только что.

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