Вы можете написать свой метод как:
def self.total
self.sum(:amount)
end
И затем вы можете использовать его также с именованными областями:
Recipe.total # without any scopes
Recipe.my_custom_named_scope.total # with your custom named scope
Другой вариант - переопределить метод поиска для этой модели:
def self.find(*args)
result = super
if args[0] && args[0] == :all
def result.total
self.sum(&:amount)
end
end
result
end
Тогда вы получите именно то, что хотите, вы сможете написать Recipe.find(:all).total
.