给出以下代码:
named_scope :by_order, :order => 'priority ASC' do
def total_points
self.sum('point_value')
end
end
named_scope :required, :conditions => ['bonus = ?', false] do
def total_points
self.sum('point_value')
end
end
named_scope :bonus, :conditions => ['bonus = ?', true] do
def total_points
self.sum('point_value')
end
end
你如何干掉重复的total_points方法?
环境:Rails 2.3.11
答案 0 :(得分:1)
分别定义所有范围可能更清晰,更可重用,然后为应用程序中所需的特定类型的集合创建类方法。这是一个简单的例子(使用Rails 3语法,但后端口应该相当容易)。请注意,我已重命名了一些范围,以更好地反映他们实际所做的事情。
class Thing << ActiveRecord::Base
scope :in_priority_order, order("priority")
scope :no_bonus, where(:bonus => false)
scope :with_bonus, where(:bonus => true)
scope :total_points, sum(:point_value)
def self.total_bonus_points
with_bonus.total_points
end
def self.total_no_bonus_points
no_bonus.total_points
end
end
顺便说一下我不确定你为什么要把订单与总和合并 - 订单不应该对返回的值产生影响(除非你申请限制)。