3

什么时候应该将模型保存在 Rails 中?谁应该负责调用 save、模型本身或调用者?

假设我的用户模型中有(公共)方法,如udpate_points,update_level等。有2个选项:

  1. 模型/方法负责调用 save 。所以每个方法都会调用 self.save.
  2. 调用者负责调用 save。所以每个方法只更新属性,但调用者user.save在用户完成后调用。

权衡是相当明显的:在选项#1中,模型保证保存,但我们在每个事务中多次调用 save。在选项#2中,我们每个事务只调用一次 save,但调用者必须确保调用 save。例如team.leader.update_points,需要我打电话team.leader.save,这有点不直观。如果我有多个方法在同一个模型对象上运行,这可能会变得更加复杂。

根据请求添加更具体的信息:更新级别查看用户拥有多少点并更新用户的级别。该函数还调用 facebook api 来通知它用户已经达到了一个新的水平,所以我可能会有效地将它作为后台作业执行。

4

1 回答 1

1

我最喜欢的实现这种东西的方法是使用 attr_accessors 和模型钩子。这是一个例子:

class User < ActiveRecord::Base
  attr_accessor :pts

  after_validation :adjust_points, :on => :update

  def adjust_points
    if self.pts
      self.points = self.pts / 3 #Put whatever code here that needs to be executed
    end
  end
end

然后在你的控制器中你做这样的事情:

def update
  User.find(params[:id]).update_attributes!(:pts => params[:points])
end
于 2012-09-09T03:23:24.787 回答