2013-03-15 70 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