8

いくつかの計算を行い、計算されたカスタム選択フィールドと結果セットを返すクエリがあります。返されたアクティブレコードオブジェクトでそれにアクセスする方法がわかりません。そのための 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インスタンス変数、そのインスタンス変数の値を取得するためのアクセサ メソッド、およびその値を変更するためのミューテータ メソッドを作成します。あなたがこれを言うとき:

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

percentage_usedActiveRecord は、返されたオブジェクトにメソッドを自動的に追加します。しかし、percentage_usedその値にアクセスするためのメソッドは によって追加されmethod_missingます。あなたが言ったのでattr_accessor :percentage_used、が呼び出されることはなく、通常の方法でクエリから値をmethod_missing取得することはできません。percentage_used

をドロップすると、それによって返されたオブジェクトattr_accessor :percentage_usedを呼び出すことができ、探している値が見つかります。ただし、AR は値をネイティブの Ruby 数値に変換できないため、返された文字列を自分で取得する必要があります。percentage_usedselectto_f

于 2013-08-26T21:18:51.700 に答える