迁移后使用新值更新数据库

时间:2014-11-18 10:17:28

标签: ruby-on-rails dbmigrate

我的数据库中有一个名为sessions的表,其中包含两列(start_timeend_time),我的表中已有很多数据。然后我生成了一个迁移:

$ rails g migration AddDurationToSessions duration:integer 

我的模型session.rb如下所示:

class Session < ActiveRecord::Base
   before_save :calc_duration

   def calc_duration
     return self[:end_time] - self[:start_time]
   end
end

我的问题是:如何将calc_duration应用于我表格中的所有旧元素?我是手动更新它们还是有最佳实践?

1 个答案:

答案 0 :(得分:0)

您可以在迁移中执行此操作:

class AddDurationToSessions < ActiveRecord::Migration
  def change
    add_column :sessions, :duration, :integer

    # Find and update all older session record
    Session.find_each do |s|
      # new duration
      calc_duration = s.end_time - s.start_time
      # update session with new duration
      s.update(duration: calc_duration.to_i)
    end

  end
end