我应该何时将模型保存在导轨中?谁应该负责调用save,模型本身或调用者?
假设我的用户模型中有udpate_points
,update_level
等公共方法。有两个选项:
self.save
。user.save
。 权衡取舍相当明显:
在选项#1 中,模型可以保证保存,但我们会为每个事务调用save多次。
在选项#2 中,我们每个事务只调用一次保存,但调用者必须确保调用save。例如,team.leader.update_points
会要求我调用team.leader.save
,这有点不直观。如果我在同一模型对象上运行多个方法,这会变得更加复杂。
根据请求添加更具体的信息: 更新级别查看用户拥有的点数并更新用户级别。该函数还调用facebook api通知它用户已达到新级别,因此我可能会有效地将其作为后台作业执行。
答案 0 :(得分: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