7

我刚开始使用 RoR 并且有一个问题:如何将当前时间戳(或任何类型的时间)插入模型中?下面你会看到日志函数 create。

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
4

2 回答 2

25

Rails 模型生成器会自动为您在数据库中创建 created_atupdated_at datetime字段。这些字段分别在创建或更新记录时自动更新。

如果您想手动创建时间戳,请将日期时间列(例如timestamp_field)添加到数据库并在模型中使用before_save回调。

class Log < ActiveRecord::Base
  before_save :generate_timestamp

  def generate_timestamp
    self.timestamp_field = DateTime.now
  end
end
于 2013-03-15T00:36:29.513 回答
4

使用 rails 生成器,例如rails generate model Lograils 会自动为您创建两个时间戳字段。

created_at当您在该记录上创建新记录时,updated_atRails 将填充这两个字段Log.newsave或者仅当您更新记录的属性或在模型实例上 使用该方法时,Log.create该字段才会更新。updated_attouch

现在,如果您想创建另一个具有时间戳类型的字段,您可以进行迁移,向您的模型添加一列,如下所示

rails generate migration add_some_timestamp_field_to_logs my_timestamp_field:timestamp

这将生成一个迁移,它将添加一个以类型命名的列my_timestamp_fieldtimestamp就像created_atupdated_at

于 2013-03-15T00:37:47.823 回答