我的模型上有以下范围。

class ProgrammeInstance  < ActiveRecord::Base
  # more code

  scope :published, -> { where(published: true) }
  scope :order_by_start_date, -> { order(:start_date) }
  scope :future_with_offset, -> { where("start_date >= ?", Date.today - 7.days) }
  scope :upcoming_with_offset, -> { future_with_offset.published.order_by_start_date }

  # more code
end

我使用范围查询从rails返回的列表
programme_instances.upcoming_with_offset

这将返回空的结果集。但是,如果我用作用域的内容而不是作用域本身来调用
programme_instances.future_with_offset.published.order_by_start_date

我得到了结果。
一定有什么我不知道的。有人能解释为什么吗?
谢谢。

最佳答案

class ProgrammeInstance  < ActiveRecord::Base
  scope :future_with_offset, -> { where(condition) }
  scope :published, -> { where(published: true) }
  scope :order_by_start_date, order('start_date')
end

你可以在控制器中调用它
ProgrammeInstance.future_with_offset.published.order_by_start_date

10-08 04:31