class Project
has_many :tasks
monetize :budget_cents # to create :budget
end
class Task
belongs_to :project
monetize :cost_cents # to create :cost
end
Я хочу создать область действия для Project.over_budget
, которая включает суммирование стоимости связанных задач.
На мой взгляд, это выглядит примерно так:
scope :over_budget, ->{ where('budget_cents <= ?', tasks.map(&:cost_cents).sum) }
Другие вещи, которые я пробовал:
scope :over_budget, -> { joins(:tasks).where('budget <= ?', tasks.map(&:cost).sum) }
scope :over_budget, -> { |proj| joins(:tasks).where('budget <= ?', proj.tasks.map(&:cost).sum) }
scope :over_budget, -> { |proj| where('budget <= ?', Task.where('project_id=?', proj.id).map(&:cost).sum) }
scope :over_budget, -> { |proj| joins(:tasks).where('budget <= ?', Tasks.where('project_id=?', proj.id).map(&:cost).sum) }
На самом деле возвращается без ошибок, но для всех задач, а не для связанных:
scope :over_budget, ->{ where('budget_cents <= ?', Task.map(&:cost_cents).sum) }
Я уверен, что упускаю что-то очевидное, но не вижу этого.