2011-11-24 50 views
5

我有一个存在模型(和表)与这些列:id,name,city。在这张表是数据,我想这张表添加列created_atupdated_at - 任何人都可以给我一个帮助,如何做到这一点?我的意思是 - 如果我创建了一个模型,所以这两列是自动创建的,并且当我保存某些内容时,时间信息总是自动插入。Rails - 如何将时间戳添加到模型?

现在可以添加这两列与自动插入时间数据?

+0

所以,你有,你想现有的模型添加时间戳?你使用的是什么版本的Rails? –

+0

rails activerecord自动创建时间戳列,为什么要添加时间戳列? – megas

+0

@megas,他可能已将他们从最初的迁移中移除 –

回答

13

这应该让你时间戳列添加到已经存在的模型

rails generate migration add_timestamps_to_users 

这会为你创建一个迁移文件。打开它,并进行必要的修改

class AddTimestampsToUsers < ActiveRecord::Migration 
    # in my example i'm using `users` table; change this to match your table name 
    def change_table :users do |t| 
    t.timestamps 
    end 
end 

然后迁移数据库

rake db:migrate 
+0

好的答案,它也很好的说明您要修改命令以匹配您正在修改的模型的名称。 –

+0

此解决方案不适用于包含数据的表,因为新创建的列应具有默认值,“timestamps”语法不允许指定它们。 – Paul

+1

Paul,您希望如何组成已有记录的日期/时间值?我认为'null'值对于在timestamp列存在之前创建的记录就足够了。 –

12

应当指出的是,虽然maček的答案是正确的核心,他不使用迁移正确的语法(忘记了“改变”方法)。

因此,这里是他的回答与纠正语法:

这应该让你时间戳列添加到已经存在的模型

rake generate migration add_timestamps_to_users 

这将会为您创建一个迁移文件。打开它,并进行必要的修改

class AddTimestampsToModel < ActiveRecord::Migration 
    # in my example i'm using `users` table; change this to match your table name 
    def change 
    change_table :users do |t| 
     t.timestamps 
    end 
    end 
end 

然后迁移数据库

rake db:migrate 
4

add_timestamps是用于此目的的专用方法:

class AddTimestampsToUsers < ActiveRecord::Migration 
    def change 
    add_timestamps :users 
    end 
end