2013-11-18 3 views
0

у меня есть:Как получить self.read_attribute для работы с агрегатами?

class Vehicle << ActiveRecord::Base 

    def odometer 
    metric ? self.read_attribute(:odometer).miles.to.kilometers : self.read_attribute(:odometer) 
    end 

end 

When metric = true и я vehicle.odometer это работает, я получаю километров.

Но когда я вызываю агрегат vehicles.sum(:odometer), он не работает, как если бы метод одометра не вызывался.

ответ

1

Это, вероятно, потому что ваш vehicles является объектом ActiveRelation и вызова сумма на нем будет вычислить сумму с помощью SQL-запрос (не используя метод, который вы определили)

запроса генерируется будет

select sum(vehicles.odometer) from vehicles where ... 

Если вы хотите, чтобы ваш метод был вызван, выполните следующие действия:

vehicles.sum(&:odometer) 
+0

Ваше решение сработало. Вы знаете, где я могу найти документацию по использованию «&»? – Bruno

+0

Он, похоже, не работает с 'vehicle.maximum (&: speed)' – Bruno

+0

'cars.average (&: speed)' также не работает. только сумма работ ... – Bruno

Смежные вопросы