2011-11-24 52 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