2013-08-26 93 views
6

我有一個查詢,執行一些數學計算,並返回一個計算的自定義選擇字段與結果集。我無法弄清楚如何訪問返回的activerecord對象。我也爲它添加了一個attr_accessor。返回自定義查詢select activerecord

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,但它不在那裏。任何想法我做錯了什麼?我從來沒有必要這樣做。

感謝

回答

9

您可以訪問它

object["percentage_used"] 
4

你既不需要也不想要attr_accessor了點。 attr_accessor創建實例變量,獲取該實例變量值的訪問器方法以及用於更改其值的增變量方法。當你這樣說:

select('gateways.*, (num_transactions_today/ SUM(num_transactions_today)) AS percentage_used ... 

的ActiveRecord會percentage_used方法自動添加到返回的對象。但是訪問該值的percentage_used方法將由method_missing添加。既然你說attr_accessor :percentage_usedmethod_missing永遠不會被調用,你不能以通常的方式得到查詢中的percentage_used值。

如果您放棄attr_accessor :percentage_used,那麼您可以在select返回的對象上致電percentage_used,您將找到要查找的值。但是,AR將無法將該值轉換爲本機Ruby編號,但您必須自己將to_f作爲返回的字符串。

+0

另一個偉大的學習來自你。 :-) –