我刚开始使用RoR并有一个问题:如何将当前时间戳(或任何类型的时间)插入模型?下面是日志功能创建。
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 :(得分:22)
Rails模型生成器会自动为您创建数据库中的created_at
和updated_at
datetime
字段。分别创建或更新记录时,这些字段会自动更新。
如果您想手动创建时间戳,请将datetime列(例如timestamp_field
)添加到数据库,并在模型中使用before_save
回调。
class Log < ActiveRecord::Base
before_save :generate_timestamp
def generate_timestamp
self.timestamp_field = DateTime.now
end
end
答案 1 :(得分:4)
使用rails生成器,例如rails generate model Log
rails,会自动为您创建两个时间戳字段。
created_at
和updated_at
当您在该记录或Log.new
上创建save
然后Log.create
的新记录时,Rails将填充这两个字段只有在更新记录的属性或在模型实例上使用方法updated_at
时,touch
字段才会更新。
现在,如果您想创建一个具有时间戳类型的其他字段,您可以进行迁移,为此模型添加一列
rails generate migration add_some_timestamp_field_to_logs my_timestamp_field:timestamp
这将生成一个迁移,该迁移将添加名为my_timestamp_field
且timestamp
类型的列,就像created_at
和updated_at