sql – 将计算列添加到ActiveRecord查询
|
我正在使用范围和一些条件运行查询.像这样的东西: conditions[:offset] = (options[:page].to_i - 1) * PAGE_SIZE unless options[:page].blank? conditions[:limit] = options[:limit] ||= PAGE_SIZE scope = Promo.enabled.active results = scope.all conditions 我想在查询中添加一个计算列(当我现在调用scope.all时).像这样的东西: (ACOS(至少(1,COS(0.71106459055501)* COS(-1.2915436464758)* COS(RADIANS(addresses.lat))* COS(RADIANS(addresses.lng)) 有没有办法在不使用find_by_sql并重写整个现有查询的情况下做到这一点? 谢谢! 解决方法当然,使用这个:conditions = Hash.new
conditions[:select] = "#{Promo.quoted_table_name}.*,(ACOS(...)) AS accurate_distance")
conditions[:offset] = (options[:page].to_i - 1) * PAGE_SIZE unless options[:page].blank?
conditions[:limit] = options[:limit] ||= PAGE_SIZE
scope = Promo.enabled.active
results = scope.all conditions
注意new:select – 告诉ActiveRecord你想要返回哪些列.结果中返回的对象将具有#accurante_distance访问器.不幸的是,ActiveRecord很笨,无法推断列的类型.您始终可以添加方法: class Promo
def accurate_distance
raise "Missing attribute" unless has_attribute?(:accurate_distance)
read_attribute(:accurate_distance).to_f # or instantiate a BigDecimal
end
end
有关详情,请参见#has_attribute. (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- database – 检查INSERT INTO语句是否成功
- sql-server – 为什么count()函数需要一个参数?
- SQL Server 此数据库没有有效所有者错误的解决方法
- clean-architecture – Clean Architecture – 如何处理数据
- 为什么我的SQL Server ORDER BY缓慢,尽管有序列被索引?
- sql – 如何保存存储过程?
- sql-server – 为什么每个人都使用sa登录是不好的做法?
- sql – 选择顶行时使用的索引错误
- sql-server – 为什么差异备份不能指定其基础?
- sql-server – 使用SSD时,数据库设计中聚集索引的概念是否合
