返回自定义查询在activerecord中选择
我有一个查询,它做了一些数学运算,并返回一个带有结果集的计算自定义选择字段。 我无法弄清楚如何在返回的activerecord对象中访问它。 我也为它添加了一个attr_accessor。
attr_accessor :percentage_used select('gateways.*, (num_transactions_today/ SUM(num_transactions_today)) AS percentage_used ').joins(:gateway_groups).where('map_gateway_groups.gateway_group_id = ?', gateway_group_id)
在结果集中,我希望能够访问:percentage_used,但它不在那里。 关于我做错什么的任何想法? 我以前从未需要这样做。
谢谢
你可以访问它
object["percentage_used"]
你既不需要也不想要attr_accessor
。 attr_accessor
创建一个实例变量,一个用于获取该实例变量值的访问器方法,以及一个用于更改其值的mutator方法。 当你这样说时:
select('gateways.*, (num_transactions_today/ SUM(num_transactions_today)) AS percentage_used ...
ActiveRecord将自动向返回的对象添加percentage_used
方法。 但是,用于访问该值的percentage_used
方法将由method_missing
添加。 既然你已经说过attr_accessor :percentage_used
,那么method_missing
将永远不会被调用,你无法以通常的方式从查询中获取percentage_used
值。
如果删除attr_accessor :percentage_used
,那么您将能够在该select
返回的对象上调用percentage_used
,并且您将找到您要查找的值。 但是,AR将无法将值转换为本机Ruby编号,因此您必须自己to_f
返回的字符串。