我有一个名为
我还有一个名为
现在,我需要根据该人的年龄运行查询,因此我已经将
我无法确定如何使此附加列成为模型默认选择语句的一部分。
我希望能够访问年龄,就像它是
这可能吗,还是我想错了?
我认为我可以通过
我考虑过的可能解决方法,但不想使用的是:
任何帮助都将不胜感激。
Rich
更新:
我尝试利用范围的失败示例:
Person
模型,其中包含代表出生日期(birth_date
)的属性。我还有一个名为
age()
的方法,用于计算该人的当前年龄。现在,我需要根据该人的年龄运行查询,因此我已经将
age()
的逻辑复制为MySQL中的计算列。我无法确定如何使此附加列成为模型默认选择语句的一部分。
我希望能够访问年龄,就像它是
Person
模型的本机属性一样,以执行针对其的查询并在我的视图中访问该值。这可能吗,还是我想错了?
我认为我可以通过
default_scope
或scope
定义其他字段,但是这些方法似乎只识别现有字段。 我还尝试过将default_scope
与attr_assessor
配对使用。我考虑过的可能解决方法,但不想使用的是:
创建一个名为
age
的实际属性,并通过回调填充。 日期始终在变化,因此这显然是不可靠的。在ActiveRecord中复制
age()
的逻辑,并在作为where条件的范围中使用。 这将实现我所需的内容,但感觉并不很DRY。我已经缓存了
age()
方法的结果。 我最感兴趣的是在where子句中使用该字段的能力。
任何帮助都将不胜感激。
Rich
更新:
我尝试利用范围的失败示例:
default_scope :select => "*, 2 as age"
attr_accessor :age
age
是空白的,我认为这是因为作用域只涉及限制而不是扩展。
select('expression AS alias')
? - taroscope :age, lambda {|age| :conditions => ["age(birch_date) > ?", age] }
。或者只需使用许多可能性之一来计算此范围内的实际年龄。 - arnep