2013-08-26 29 views
6

Bazı matematik yapan ve sonuç kümesiyle hesaplanmış bir özel seçim alanı döndüren bir sorgu aldım. Geri dönen activerecord nesnesinde buna nasıl erişileceğini anlayamıyorum. Bunun için bir attr_accessor ekledim. sonuç kümesindeki return custom query select activerecord içinde

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) 

, ben erişmesini beklenebilir: percentage_used, ama orada değil. Neyi yanlış yaptığım hakkında bir fikrin var mı? Bunu daha önce hiç yapmak zorunda değildim.

Teşekkür

cevap

9

Sen muhtaç ne

object["percentage_used"] 
4

olarak erişmek ne de bunun için attr_accessor istiyor olabilir. attr_accessor, bir örnek değişkeni, bu örnek değişkeninin değerini almak için bir erişimci yöntemi ve değerini değiştirmek için bir mutator yöntemi oluşturur. Bunu derken:

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

ActiveRecord otomatik dönen nesnelere percentage_used yöntemi ekleyecektir. Ancak bu değere erişmek için percentage_used yöntemi method_missing tarafından eklenecektir. attr_accessor :percentage_used, method_missing dediğinizden beri hiçbir zaman çağrılmayacak ve her zamanki gibi sorgudan percentage_used değerini alamıyorsunuz.

attr_accessor :percentage_used'u bırakırsanız, select tarafından döndürülen nesneler üzerinde percentage_used'u arayabilir ve aradığınız değerleri bulabilirsiniz. Ancak, AR, değeri yerel bir Ruby sayısına dönüştüremeyecektir, bu nedenle döndürülen dizeye to_f kendiniz sahip olmanız gerekir.

+0

Sizden başka bir harika öğrenme. :-) –