как перенести этот код в модель? - PullRequest
0 голосов
/ 10 марта 2011

У меня есть код, который по-разному вычисляет параметр в действии создания и обновления.Здесь expiry_time - это столбец в БД, а 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.Должен ли я проверить идентификатор там, чтобы решить, является ли это новая запись или существующая, как эта?

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 Ответ

3 голосов
/ 10 марта 2011

используйте new_record? или :on => :create для вызова другой функции

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...