2015-08-14 2 views
0

У меня есть 3 соответствующие модели в приложении Rails 4 - Charge:Rails 4 пользовательских метод в модели, без контроллера

class Charge < ActiveRecord::Base 
    belongs_to :rate 
    belongs_to :shift 

    def total 
    self.rate.value * self.quantity 
    end 

end 

Оценить:

class Rate < ActiveRecord::Base 
    has_many :charges 
end 

и сдвиг:

class Shift < ActiveRecord::Base 
    has_many :charges 

    def total_charge 
    self.charges.sum('total') 
    end 

end 

Я пытаюсь использовать shift.total_charge на мой взгляд, но я получаю ошибку:

SQLite3::SQLException: no such column: total: SELECT SUM(total) FROM "charges" WHERE "charges"."shift_id" = ? 

Таким образом, невозможно определить общее количество в модели Charge таким образом и иметь доступ к сумме из модели Shift в качестве фактического столбца. Я изо всех сил стараюсь найти подходящий Rails 4 способ сделать это - возможно ли это сделать в модели или мне нужно создать контроллер для Charge и попытаться сделать там расчет?

+0

В какой таблице вы имеете столбец 'total'? –

+0

У меня нет столбца 'total' - это метод в модели Charge. –

+0

O i see, missinged .. –

ответ

1

sum работает только с колонками. Вы можете использовать что-то вроде

class Shift < ActiveRecord::Base 
    has_many :charges 

    def total_charge 
    self.charges.map {|c| c.rate.value * c.quantity }.sum 
    end 
end 

и избежать п + 1 задачи включают Rate в Charge

class Charge < ActiveRecord::Base 

    belongs_to :rate 
    belongs_to :shift 

    default_scope {includes :rate} 
end 
Смежные вопросы