重构模型内部的回调

时间:2013-06-18 01:21:38

标签: ruby-on-rails-3 callback

我对rails非常陌生,我正在尝试创建一个在保存记录之前应用用户信息的回调。

这是回调:

def add_resolution_name
  if self.res_desc_changed?
      self.res_provided_name = current_user.first_name
    elsif self.res_desc_changed? && self.res_approved?
      self.res_provided_name = current_user.first_name
      self.res_approved_name = current_user.first_name
    elsif self.res_approved_changed? && self.res_approved?
      self.res_approved_name = current_user.first_name
    elsif self.res_approved_changed? && !self.res_approved?
      self.res_approved_name = nil
  end
  save
  logger.info "pocessed resolution information... #{current_user.first_name}"
end

正如您所看到的那样,它非常难看,我无法访问故障单模型中的current_user。我应该把它放到演示者或服务中吗?任何提示赞赏。

1 个答案:

答案 0 :(得分:0)

在rails中,有一个名为ActiveRecord::Observer的类,它允许您向自己的模型添加一些事件侦听器,例如before_saveafter_save。看看http://api.rubyonrails.org/classes/ActiveRecord/Observer.html

例如

class UserObserver < ActiveRecord::Observer
  def before_save(comment)
    # your code for add resolution here
  end
end