ruby子类过滤器

Nik*_* So 3 ruby ruby-on-rails

嘿! 也许我得到了一个子类错误的想法,但我有一个Person模型,它有一个名为"age"的attrib所以

Person.first.age #=> '20'
Run Code Online (Sandbox Code Playgroud)

现在我想要一个基本上是55岁或以上的人的模型所以我知道我可以有这样一个类:class Senior <Person end

但是我如何"预过滤"高级班级,以便属于该班级的每个对象的年龄> = 55?

Senior.first.age #=> 56
Run Code Online (Sandbox Code Playgroud)

更新1:所以说我有公司有很多人,有人属于公司,所以公司.第一人.#=> ["杰克","凯特"]

如果杰克的年龄> 55,那么它是否会起作用:Company.first.seniors#=>"jack"

要么

Company.first.people.senior(s)#=>"jack"?

我知道named_scope可能是我想要的,但我也注意到named_scope似乎是Class变量Person的一个方法.不是它的实例,这对我来说是有意义的. - 因此,如果我要为一组activerecord模型(同一类的对象)设计这样的便利过滤器,我该怎么做呢?我猜我必须对这样的数组使用"检测",但这会在模型的定义中进行?

更新2我很确定我还不清楚,例如旺旺:第一家公司的55岁或以上的人公司.first.people.detect {| p | p.age> 54}

我知道这不是很长,但我的条件将远远超过> 54,每次检测都会变得笨拙.

谢谢!

fl0*_*00r 7

您可以使用命名范围

class Person < ActiveRecord::Base
  named_scope :seniors, :conditions => ['age >= ?', 55]
end

Person.seniors.first.age #=> 83
Run Code Online (Sandbox Code Playgroud)