问题
I've got a query that does some math and returns a calculated custom select field with the result set. I cannot figure out how to access that in the activerecord object that is returned. I've added an attr_accessor for it also.
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)
in the result set, I would expect to have access to :percentage_used, but it is not in there. Any ideas on what i'm doing wrong? i've never needed to do this before.
Thanks
回答1:
You can access it as
object["percentage_used"]
回答2:
You neither need nor want attr_accessor
for that. attr_accessor
creates an instance variable, an accessor method for getting the value of that instance variable, and a mutator method for changing its value. When you say this:
select('gateways.*, (num_transactions_today/ SUM(num_transactions_today)) AS percentage_used ...
ActiveRecord will automatically add a percentage_used
method to the returned objects. But the percentage_used
method for accessing that value will be added by method_missing
. Since you've said attr_accessor :percentage_used
, method_missing
will never be called and you can't get at the percentage_used
value from the query in the usual way.
If you drop the attr_accessor :percentage_used
, then you'll be able to call percentage_used
on objects returned by that select
and you'll find the values you're looking for. However, AR won't be able to convert the value to a native Ruby number though so you'll have to to_f
the returned string yourself.
来源:https://stackoverflow.com/questions/18452772/return-custom-query-select-in-activerecord