2013-08-26 11 views
6

私はいくつかの計算を行い、計算されたカスタムセレクトフィールドを結果セットとともに返します。私は、返される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) 

結果セットでは、私はパーセンテージにアクセスすることが期待されますが、そこにはありません。私が間違っていることに関するアイデアは?私は以前これを行う必要はなかった。

おかげ

答えて

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_usedと言っているので、method_missingは決して呼び出されず、通常の方法でクエリからpercentage_used値を取得することはできません。

attr_accessor :percentage_usedを削除すると、selectで返されたオブジェクトにはpercentage_usedが返され、探している値を見つけることができます。ただし、ARは値をネイティブのRuby番号に変換することはできませんが、返される文字列は自分でto_fにする必要があります。

+0

あなたからの素晴らしい学習です。 :-) –

関連する問題