【发布时间】:2014-08-28 00:52:41
【问题描述】:
我是 RoR 的新手,在迁移方面需要一些帮助。 我有一个现有的数据库,其中包含 mysql 数据库中的“日期”列。 我需要将它们存储到 3 个单独的整数字段(年、月、日期)中(不要问我为什么,因为我的客户是白痴)......并且需要将现有列迁移到新列中(现有数据库已经包含数据)。我只是想知道我怎么能在迁移中做到这一点?
谢谢
【问题讨论】:
我是 RoR 的新手,在迁移方面需要一些帮助。 我有一个现有的数据库,其中包含 mysql 数据库中的“日期”列。 我需要将它们存储到 3 个单独的整数字段(年、月、日期)中(不要问我为什么,因为我的客户是白痴)......并且需要将现有列迁移到新列中(现有数据库已经包含数据)。我只是想知道我怎么能在迁移中做到这一点?
谢谢
【问题讨论】:
经过一番挖掘……解决了。 迁移不是执行此操作的首选方式,应使用 rake 任务。
首先,使用迁移生成新列,然后在模型中添加新的 attr_accessible。
要生成 rake 任务,请点击 http://railsguides.net/how-to-generate-rake-task/ 链接。
并使用下面的代码,假设包含日期列的模型名为Visit
namespace :visit_date_migration do
desc "Migrate visit date into 3 integer columns for year/month/date"
task :migrate_date => :environment do
Visit.all.each do |visit|
unless visit.visit_date.nil? || visit.visit_date == 0
year = visit.visit_date.year
month = visit.visit_date.month
day = visit.visit_date.day
visit.visit_date_year=year
visit.visit_date_month=month
visit.visit_date_date=day
visit.save!
end
end
end
end
然后像普通任务一样运行 rake 任务。
【讨论】: