Ruby on rails 在模型中合并Rails 4中的两个作用域

Ruby on rails 在模型中合并Rails 4中的两个作用域,ruby-on-rails,Ruby On Rails,请注意,类似的问题也与Rails3有关,Rails4中的作用域发生了适度的变化。只是语法上的,但我仍然希望有一个最新的答案 无论如何,如何合并这些作用域: class Cat < ActiveRecord::Base scope :recent, -> { order('cats.approve_date ASC').limit(5) } scope :approved, -> { where( state: 'approved') } end 如果我想得到所

请注意,类似的问题也与Rails3有关,Rails4中的作用域发生了适度的变化。只是语法上的,但我仍然希望有一个最新的答案

无论如何,如何合并这些作用域:

class Cat < ActiveRecord::Base
    scope :recent, -> { order('cats.approve_date ASC').limit(5) }
    scope :approved, -> { where( state: 'approved') }
end
如果我想得到所有批准的猫:

@approved_cats = Cat.approved
但是我如何得到所有最近批准的猫呢?我可以在控制器中使用
merge
功能,但我希望遵循惯例并在模型中执行此操作:

class Cat < AciveRecord::Base
    scope :recent_approved, -> { }
end
类Cat{} 结束
您可以像这样链接作用域

@cats = Cat.approved.recent
但是使用作用域也是可能的

scope :recent_approved, -> { where(state: 'approved').order(:approve_date).limit(5) }

Cat.approved.recent将起作用。@Iceman虽然我说过我想在模型中这样做,但这是一种非常可读的方式。谢谢!您最终可以将
self.recent.approved
放入
:recent\u approved
scope@MrYoshiji谢谢,我觉得很简单。如果你愿意,我可以建议你来吗<代码>范围:最近,->(nb_limit=5){order('cats.approve_date ASC').limit(nb_limit)}因此它可以让您选择所需数量,默认值为5。
scope :recent_approved, -> { where(state: 'approved').order(:approve_date).limit(5) }