将两个命名范围组合到聚合范围中

时间:2016-06-03 19:22:56

标签: ruby-on-rails ruby

我有两个命名范围的以下模型:

class Blog < ApplicationRecord
 scope :past_two_years, -> {where('end_date > ?', Date.today - 2.years)}
 scope :order_by_end_date, -> {order('end_date DESC')}   
end

我现在想要定义一个名为past_two_years_and_order_by_end_date的'聚合'范围。此范围应回收现有范围,以保持代码DRY。

我知道我可以像这样创建一个类方法:

def self.past_two_years_and_order_by_end_date
  past_two_years.order_by_end_date
end

但我更喜欢使用范围而不是类方法。

问题:这可能吗?是否可以编写组合/回收现有范围的聚合范围?

I did notice this similar question,但它已有八年历史了,之后一直在继续使用rails语法。

1 个答案:

答案 0 :(得分:1)

这似乎有效:

scope :past_two_years_and_order_by_end_date, -> {self.past_two_years.order_by_end_date}