我有一个代码,用于计算create action中的参数并以不同方式更新操作。这里expiry_time是db中的列,expiry_duration是一个虚拟参数。
class SomeController
def create
params[:model][:expiry_time] = Time.now + params[:model][:expiry_duration].to_i
@model = Model.new(params[:model])
if @model.save
redirect_to ..
else
render ..
end
end
def update
@model = Model.find(params[:id])
params[:model][:expiry_time] = @model.created_at + params[:model][:expiry_duration].to_i
if @model.update_params(params[:model])
redirect_to ..
else
render ..
end
end
end
我在考虑将计算部分移动到before_save函数中的模型。我应该检查那里的id来决定它是新记录还是现有记录?
class Model
before_save :update_expiry_time
def update_expiry_time
start_time = id ? created_at : Time.now
expiry_time = start_time + expiry_duration.to_i
end
def expiry_duration
expiry_time - created_at
end
end
您怎么看?
答案 0 :(得分:3)
使用new_record?
,或使用:on => :create
调用其他功能