Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Rails Migrations - Modify rows based on condition

I need to update a table data in database using RAILS migrations.

Sample:
Table: Table_A(Col_A(number), Col_B(varchar),...)
Query: UPDATE Table_A SET Col_B = "XXX" where Col_B = "YYY"

What would be the best way to do this using RAILS Migrations. I am not even sure if RAILS migrations is the way to go for updating data in database. Any explanation would be helpful.

like image 509
kanap008 Avatar asked Oct 22 '25 02:10

kanap008


1 Answers

It's usually better to do these sorts of big data updates in a rake task. I usually write them so they have two versions: rake change_lots_of_data:report and rake change_lots_of_data:update. The 'report' version just executes the where clause and spits out a list of what would be changed. The 'update' version uses the very same where clause but makes the changes.

Some advantages of doing it this way are:

  • Migrations are saved for changing the database structure
  • You can run the 'report' version as often as you want to make sure the right records are going to be updated.
  • It's easier to unit test the class called by the rake task.
  • If you ever need to apply the same criteria to make the change again, you can just run the rake task again. It's possible but trickier to do that with migrations.
like image 120
sockmonk Avatar answered Oct 23 '25 14:10

sockmonk



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!