Как найти процент выполнения в ActiveRecord? - PullRequest
1 голос
/ 10 мая 2011

Я не могу найти элегантный способ сделать это.

Но скажем, у моей модели Projects много Tasks.

Каждый task имеет логическое поле для complete.

Так что, если у меня есть 10 tasks и 4 "завершены", а 6 - нет, тогда я только на 40% завершен.

Есть ли хитрый способ сделать это в scope, чтобы SQL был скудным?

У меня уже есть две области видимости:

  scope :complete, lambda {
    where("tasks.complete = true")
  }

  scope :not_complete, lambda {
    where("tasks.complete = false")
  }

Спасибо за любые советы.

1 Ответ

2 голосов
/ 10 мая 2011

Я бы подумал, что, поскольку вы хотите получить окончательное значение от этого, модельный метод будет лучшим подходом.(области должны возвращать отношение для поддержки цепочки). Вы можете использовать эти области для возврата процента завершения, что-то вроде:

def percent_complete
  not_complete.size.to_f / complete.size.to_f
end

Или если вам нужны big_decimal и big_decimail / util в вашей моделиВы можете использовать to_d, чтобы получить десятичное деление.Тогда, на ваш взгляд, все, что вам нужно сделать, это @ project.percent_complete

...