ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

mysql – 通过ActiveRecord访问SQL计算列

2019-06-30 16:04:08  阅读:231  来源: 互联网

标签:mysql ruby-on-rails activerecord calculated-columns


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

我还有一个名为age()的方法,它可以解决当前人的年龄问题.

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

我无法训练如何将此附加列作为模型的默认select语句的一部分.

我希望能够访问该年龄,就像它是Person模型的本机属性一样,对它执行查询并访问我的视图中的值.

这可能,或者是在错误的树上吠叫?

我以为我可以通过default_scope或scope定义其他字段,但这些方法似乎只能识别现有字段.我还尝试将default_scope与attr_assessor一起使用.

可能的解决方法我考虑过但不愿意这样做:

>创建一个名为age的实际属性,并通过使用回调填充.日期总是在变化,所以这显然是可靠的.
>将ActiveRecord中的逻辑复制为age(),并将范围复制为where cause.这将实现我的需要,但感觉不是很干.
>我已经缓存了age()方法的结果.它是在我最感兴趣的where子句中使用该字段的能力.

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

任何帮助,将不胜感激.

丰富

UPDATE

我尝试使用范围失败的一个例子:

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

attr_accessor :age

年龄是空白的,我假设因为范围只涉及限制,而不是扩展.

解决方法:

kim3er你的问题解决方案很简单.跟着这些步骤:

从模型中松开attr_accessor:age.你根本就不需要它.

保留Person模型的默认范围:default_scope:select => “*,2岁作为年龄”

最后打开一个控制台试试

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,ruby-on-rails,activerecord,calculated-columns
来源: https://codeday.me/bug/20190630/1338040.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有