2013-08-26 8 views
6

Ho una query che esegue alcuni calcoli matematici e restituisce un campo di selezione personalizzato calcolato con il set di risultati. Non riesco a capire come accedervi nell'oggetto activerecord che viene restituito. Ho aggiunto anche un attr_accessor per questo.restituire query personalizzata selezionare in 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) 

nel set di risultati, mi aspetto di avere accesso a: percentage_used, ma non è lì. Qualche idea su cosa sto facendo male? non ho mai avuto bisogno di farlo prima.

Grazie

risposta

9

È possibile accedere come

object["percentage_used"] 
4

È né bisogno né voglia attr_accessor per questo. attr_accessor crea una variabile di istanza, un metodo accessor per ottenere il valore di tale variabile di istanza e un metodo mutatore per modificarne il valore. Quando si dice questo:

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

ActiveRecord aggiungerà automaticamente un metodo percentage_used agli oggetti restituiti. Ma il metodo percentage_used per accedere a quel valore verrà aggiunto da method_missing. Poiché hai detto attr_accessor :percentage_used, method_missing non verrà mai chiamato e non è possibile ottenere il valore percentage_used dalla query nel solito modo.

Se si rilascia lo , sarà possibile chiamare percentage_used sugli oggetti restituiti da tale select e verranno individuati i valori che si stanno cercando. Tuttavia, AR non sarà in grado di convertire il valore in un numero di Ruby nativo, anche se in questo modo sarà necessario digitare la stringa restituita to_f.

+0

Un altro grande apprendimento da parte tua. :-) –