Update the database with new values after a migration

214 views Asked by At

I have a table in my database called sessions with two columns (start_time and end_time) in it and I already have lots of data in my table. I then generated a migration:

$ rails g migration AddDurationToSessions duration:integer 

My model session.rb looks like this:

class Session < ActiveRecord::Base
   before_save :calc_duration

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

My question is: how do I apply calc_duration to all of my older elements in my table? Do I update them manually or is there a best practice for this?

1

There are 1 answers

1
Roman Kiselenko On BEST ANSWER

You can do it in migration:

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