返回自定义查询在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_accessorattr_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返回的字符串。