Ruby on rails 为什么插入到列中的日期转换为2000-01-01?

Ruby on rails 为什么插入到列中的日期转换为2000-01-01?,ruby-on-rails,Ruby On Rails,当我尝试在表中插入值“28/09/2014 13:40:30.520153”时,一切都很顺利。此代码可执行以下操作: before_create :set_deadline def set_deadline time_for_deadline = Sla.find(self.sla_id).time_for_deadline self.deadline = Time.now + time_for_deadline.hours return self.deadline end 从日

当我尝试在表中插入值“28/09/2014 13:40:30.520153”时,一切都很顺利。此代码可执行以下操作:

before_create :set_deadline

def set_deadline
  time_for_deadline = Sla.find(self.sla_id).time_for_deadline
  self.deadline = Time.now + time_for_deadline.hours
  return self.deadline
end
从日志:


SQL(0.9ms)插入到“请求”//某些列/。。。。值/某些值/返回“id”[/some other VALUES../,[“deadline”,“2014-09-28 13:40:30.520153”],/…some other../] 但最后在表中出现了01-01-2000。 我认为这是因为列的类型—“time”试图更改为datetime,但出现了一个错误:

错误:“截止日期”列的类型为timestamp,不带时区,但表达式的类型为time,不带时区,位于字符156提示:您需要重写或强制转换表达式:在“请求”中插入($1、$2、$3、$4、$5、$6、$7、$8、$9)返回“id”的值(“评论”、“创建时间”、“截止日期”、“部门”、“发起人”、“负责人”、“sla_id”、“sla_编号”、“更新时间”)
结束


出什么问题了?

您需要重新启动Rails,它才能获取列类型中的更改

如果您使用
rails服务器运行应用程序
,那么使用Control-C中断应用程序并重新启动就足够了

如果不起作用,请尝试运行
弹簧止动块
,强制其完全重新加载


如果您使用的是Unicorn或Passenger等外部服务器,则需要重新启动该服务器。

您是如何更改列的类型的?rails g migration RemovedReadLineFromRequests deadline:time和rails g migration AddDeadlineToRequests deadline:datetime,以及在这之后的rake db:MigrateThat谢谢。这真的很有帮助。甚至我都不明白我怎么会忘记重新启动服务器!)
create_table "requests", force: true do |t|
t.datetime "created_at"
t.datetime "updated_at"
...some colums here...
...
t.time "deadline"