8

我有一个查询,它做一些数学运算并返回一个带有结果集的计算自定义选择字段。我无法弄清楚如何在返回的 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,但它不在那里。关于我做错了什么的任何想法?我以前从来不需要这样做。

谢谢

4

2 回答 2

10

您可以访问它

object["percentage_used"]
于 2013-08-26T20:51:41.757 回答
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你会找到你正在寻找的值。但是,AR 将无法将该值转换为原生 Ruby 数字,因此您必须to_f自己处理返回的字符串。

于 2013-08-26T21:18:51.700 回答