gpt4 book ai didi

mysql - 通过 ActiveRecord 访问 SQL 计算列

转载 作者:可可西里 更新时间:2023-11-01 07:35:57 27 4
gpt4 key购买 nike

我有一个Person 模型,其中包含一个表示出生数据(birth_date)的属性。

我还有一个名为 age() 的方法,它计算出此人的当前年龄。

我现在需要根据人的年龄运行查询,所以我将 age() 的逻辑复制为 MySQL 中的计算列。

我不知道如何让这个额外的列成为模型默认选择语句的一部分。

我希望能够像访问 Person 模型的 native 属性一样访问年龄,对它执行查询并访问我的 View 中的值。

这可能吗,还是我找错了树?

我以为我可以通过 default_scopescope 定义额外的字段,但这些方法似乎只能识别现有字段。我还尝试将 default_scopeattr_assessor 结合使用。

我考虑过但不想做的可能解决方法:

  • 创建一个名为 age 的实际属性,并通过使用回调进行填充。日期总是在变化,所以这显然是可靠的。

  • 将 ActiveRecord 中的逻辑复制为 age(),并在范围中复制为 where cause。这将实现我所需要的,但感觉不是很干。

  • 我已经缓存了 age() 方法的结果。我最感兴趣的是在 where 子句中使用字段的能力。

必须有一种方法可以通过 SQL 定义动态字段,默认情况下我可以通过模型访问这些字段。

如有任何帮助,我们将不胜感激。

丰富

更新

我尝试使用作用域失败的一个例子:

default_scope :select => "*, 2 as age"

attr_accessor :age

age 是空白,我想是因为范围只处理限制,不处理扩展。

最佳答案

kim3er 您解决问题的方法很简单。请按照以下步骤操作:

从您的模型中松开 attr_accessor :age。您根本不需要它。

保留 Person 模型的默认范围:default_scope :select => "*, 2 as age"

最后打开控制台试试

p = Person.first
p.age
=> 2

当您使用 as 定义选择时,Rails 会自动为您在实例上添加这些方法!所以你的问题的答案:

There must be a way to define dynamic fields through SQL that I can access through the model by default.

是:

Rails

关于mysql - 通过 ActiveRecord 访问 SQL 计算列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6741156/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com