2009-01-20 105 views
3

我遇到ActiveRecord根据文档插入DATETIME的问题; “如果表具有名为created_at/created_on或updated_at/updated_on的字段,Active Record会自动创建时间戳并更新操作。”我有一个名为created_at的列,但ActiveRecord没有插入DATETIME。我的插入查询如下所示:用ActiveRecord和MySQL插入DATETIME

def add_record(server_id, backup_type) 
    Record.create(:server_id => server_id, :backup_type => backup_type) 
end 

我知道我可以使用的东西插入时间像

:created_at => "#{Time.now.strftime("%Y-%m-%d %H:%M:%S")}" 

,我想远离这种美丽的原因是由于服务器之间的时间差在当地和地理上都是如此。我想知道是否有办法在相同的创建方法中运行该类型,例如:

def add_record(server_id, backup_type) 
    Record.create(:server_id => server_id, :backup_type => backup_type, created_at => DATETIME()) 
end 

谢谢。

回答

1

如果created_at字段类型为TimeStamp,则可以使用函数CURRENT_TIMESTAMP()来设置该字段的值。

+0

Time.now不适合我,但是这样做! – fatfrog 2012-11-02 23:12:05

3

你有一个created_at列,但ActiveRecord没有创建一个时间戳?你的created_at列的列类型是什么?也许你可以向我们展示你的迁移?另外,如果你告诉Rails使用UTC(2.2中的默认值,我认为),那么时间值将是正确的,而不管不同的服务器区域设置如何。

而且,最后:您可以只传递一个时间/日期/日期时间实例,您不必自己格式化它。例如。 YourModel.create(:a_time_column => Time.now)

+0

由于某种原因,我正在做CallLog.callstart = Date.new。将该值设置为0000-00-00 00:00:00。基于这个答案,我将它改为CallLog.callstart = Time.now,现在我感觉好多了。 – 2009-10-23 13:27:14