Rails 3:保存模型的最佳实践

我应该何时将模型保存在导轨中? 谁应该负责调用save,模型本身或调用者?

假设我的用户模型中有(公共)方法,如udpate_pointsupdate_level等。 有两种选择:

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

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

根据请求添加更具体的信息:更新级别查看用户拥有的点数并更新用户级别。 该函数还调用facebook api通知它用户已达到新的级别,因此我可能会有效地将其作为后台作业执行。

我最喜欢的实现这样的东西的方法是使用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