请注意,类似的问题与Rails 3有关,并且范围在Rails 4中已经改变了适度的数量。仅在语法上,但我仍然希望得到最新的答案。
无论如何,我如何合并这些范围:
class Cat < ActiveRecord::Base
scope :recent, -> { order('cats.approve_date ASC').limit(5) }
scope :approved, -> { where( state: 'approved') }
end
如果我想得到所有最近的猫:
@recent_cats = Cat.recent
如果我想获得所有批准的猫:
@approved_cats = Cat.approved
但是如何获得所有最近批准的猫?我可以在控制器中使用merge
函数,但我想遵循约定并在模型中执行此操作:
class Cat < AciveRecord::Base
scope :recent_approved, -> { }
end
答案 0 :(得分:2)
您可以链接这样的范围。
@cats = Cat.approved.recent
但也可以使用范围
scope :recent_approved, -> { where(state: 'approved').order(:approve_date).limit(5) }