2013-03-15 75 views
5

我剛開始回報率和有一個問題:我如何可以插入當前時間戳(或任何類型的時間)到模型?在下面你看到日誌功能的創建。如何插入時間戳到軌數據庫列

def create 
    @log = Log.new(params[:log]) 

    respond_to do |format| 
     if @log.save 
     format.html { redirect_to @log, notice: 'Log was successfully created.' } 
     format.json { render json: @log, status: :created, location: @log } 
     else 
     format.html { render action: "new" } 
     format.json { render json: @log.errors, status: :unprocessable_entity } 
     end 
    end 
    end 
+0

你創建一個使用Rails生成的模型? – 2013-03-15 00:33:30

回答

18

Rails的模型生成器自動在數據庫中創建你created_atupdated_atdatetime領域。分別創建或更新記錄時,這些字段會自動更新。

如果您想手動創建時間戳,請在數據庫中添加日期時間列(例如timestamp_field),並在模型中使用before_save回調。

class Log < ActiveRecord::Base 
    before_save :generate_timestamp 

    def generate_timestamp 
    self.timestamp_field = DateTime.now 
    end 
end 
+0

但我會插入時間戳。 – venumaer 2013-03-15 00:37:56

+0

我用一個手動時間戳的例子更新了答案。 – 2013-03-15 00:50:51

+0

你不需要寫'self.timestamp_field = DateTime.now'? – 2014-10-08 23:17:59

2

使用Rails生成e.g rails generate model Log軌你們兩個時間戳字段自動創建。

created_atupdated_at這兩個領域將Rails的,當你創建一個新的記錄做Log.new然後在該記錄saveLog.createupdated_at現場填寫的會在你更新記錄的屬性,只有更新,或者當您使用方法touch在模型的一個實例上。現在

,如果你想創建一個時間戳類型另一場你可以做一個遷移,增加了一列模型這樣

rails generate migration add_some_timestamp_field_to_logs my_timestamp_field:timestamp 

這將產生一個移民,將增加一個名爲my_timestamp_field列用timestamp類型,就像created_atupdated_at

相關問題