我有一个查询做了一些数学运算,并返回一个带有结果集的计算自定义选择字段。我无法弄清楚如何在返回的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,但它不在那里。关于我做错什么的任何想法?我以前从来不需要这样做。
由于
答案 0 :(得分:9)
您可以将其作为
进行访问object["percentage_used"]
答案 1 :(得分:4)
你既不需要也不想要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
值。
如果您放弃percentage_used
,则可以在select
返回的对象上调用to_f
,然后您就会找到您要查找的值。但是,AR将无法将值转换为本机Ruby数字,因此您必须自己{{1}}返回的字符串。