在activerecord中返回自定义查询选择

时间:2013-08-26 20:48:54

标签: mysql ruby-on-rails ruby activerecord rails-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,但它不在那里。关于我做错什么的任何想法?我以前从来不需要这样做。

由于

2 个答案:

答案 0 :(得分:9)

您可以将其作为

进行访问
object["percentage_used"]

答案 1 :(得分:4)

你既不需要也不想要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值。

如果您放弃percentage_used,则可以在select返回的对象上调用to_f,然后您就会找到您要查找的值。但是,AR将无法将值转换为本机Ruby数字,因此您必须自己{{1}}返回的字符串。