使用迁移文件更新数据库

时间:2011-12-15 01:07:07

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.1

我有一个简单的用户表,我想在我的用户表中添加一个说明永久链接的新字段。此永久链接将使用以下代码更新所有用户 name.downcase.gsub(/[^0-9a-z]+/, ' ').strip.gsub(' ', '-')。我想创建一个迁移文件,使用上面的代码更新所有用户永久链接字段,以便旧用户可以设置永久链接,我会为新用户使用after_create方法。

1 个答案:

答案 0 :(得分:0)

我想你可以尝试这样的事情:

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