Mover
Move ActiveRecord records across tables like it ain't no thang.
Requirements
sudo gem install mover
Move records
Article.last.move_to(ArticleArchive)
Article.move_to(ArticleArchive, [ "created_at > ?", Date.today ])
The move_to
method is available to all models.
The two tables do not have to be identical. Only shared columns transfer.
Callbacks
In this example, we want an "archive" table for articles and comments.
We also want the article's comments to be archived when the article is.
class Article < ActiveRecord::Base
has_many :comments
before_move :ArticleArchive do
comments.each { |c| c.move_to(CommentArchive) }
end
end
class ArticleArchive < ActiveRecord::Base
has_many :comments, :class_name => 'CommentArchive', :foreign_key => 'article_id'
before_move :Article do
comments.each { |c| c.move_to(Comment) }
end
end
class Comment < ActiveRecord::Base
belongs_to :article
end
class CommentArchive < ActiveRecord::Base
belongs_to :article, :class_name => 'ArticleArchive', :foreign_key => 'article_id'
end
Reserve a spot
Before you create a record, you can "reserve a spot" on a table that you will move the record to later.
archive = ArticleArchive.new
archive.id = Article.reserve_id
archive.save
Magic columns
moved_at
If a table contains the column moved_at
, it will automatically be populated with the date and time it was moved.