在Rails 3应用程序中我有表subscription_schedules,其中有一列' time'型
示例记录这样的lokks:
#<Subscription::Schedule id: 3504, subscription_id: 4961, scheduled_at: "2000-01-01 01:11:00", primary: true, created_at: "2015-09-28 01:13:34", updated_at: "2015-09-28 01:13:34", active: true>
我想要做的是将scheduled_at转换为datetime。我决定添加新列'temp_scheduled_at'
,将所有'scheduled_at'
保存到其中,使用'scheduled_at'
方法将change_column()
更改为日期时间,然后将'temp_scheduled_at'
中的内容移至{ {1}}。
看起来像这样:
'scheduled_at'
不幸的是那些问题开始了。稍后致电add_column :subscription_schedules, :temp_scheduled_at, :datetime
Subscription::Schedule.select {|s| s.subscription}.each do |schedule|
schedule.temp_scheduled_at = schedule.scheduled_at
schedule.scheduled_at = nil
begin
schedule.save!
rescue => e
puts schedule.id
end
end
change_column :subscription_schedules, :scheduled_at, :datetime
之后,我会
Subscription::Scheudule.all
我真的不知道导致此错误的原因是什么,在更改列类型记录时使用&#39;无效日期&#39;看起来像这样:
Invalid date in field 'scheduled_at': 2001-00-00 00:00:00
答案 0 :(得分:0)
我建议你在mysql查询中使用它。您可以在mysql查询中更改日期时间,并将其作为新列名称引用。与progrmming方式相比,它非常容易。对于前 -
select schedule_at, now() as temp_scheduled_at from tablename;
您可以阅读更多日期时间功能here