Возможно, было бы более понятным и более пригодным для повторного использования определять все области отдельно, а затем создавать методы класса для конкретных типов коллекций, которые вам нужны в вашем приложении. Вот краткий пример (с использованием синтаксиса 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
Кстати, я не уверен, почему вы хотите объединить заказ с суммой - заказ не должен иметь значения для возвращаемых значений (если вы не применяете лимит).