如何将此代码传输到模型?

时间:2011-03-10 19:35:10

标签: ruby-on-rails

我有一个代码,用于计算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

您怎么看?

1 个答案:

答案 0 :(得分:3)

使用new_record?,或使用:on => :create调用其他功能