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,每次检测都会变得笨拙.
谢谢!
您可以使用命名范围
class Person < ActiveRecord::Base
named_scope :seniors, :conditions => ['age >= ?', 55]
end
Person.seniors.first.age #=> 83
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
267 次 |
| 最近记录: |