has_many и сумма named_scope

У меня такая ситуация:

Stories has many Tasks
Tasks have an integer called hours_left

Мне нужна именованная область, чтобы найти истории, для всех задач которых осталось более 0 часов.

На основе этого сообщения. Я написал это:

class Story
  has_many :tasks
  named_scope :uncompleted, { 
    :joins=>["INNER JOIN tasks ON tasks.story_id = stories.id"],
    :group=> 'stories.id',
    :select=>'stories.*, SUM(tasks.hours_left) AS sum_amount',
    :having=>"sum_amount > 0"
  }
end

Но Story.uncompleted возвращает пустой массив.

Вы можете помочь мне?


person Manuel M    schedule 29.09.2009    source источник
comment
Я также заметил, что если я удаляю условие :having=›sum_amount › 0, я получаю все истории: у тех, у кого осталось 0 часов, атрибут hours_left установлен на 0, а у остальных (тех, кого я хочу) атрибут hours_left установлен на nil.   -  person Manuel M    schedule 29.09.2009


Ответы (1)


Решено. Этот код действительно работает, проблема в том, что он возвращает nil как результат суммы, если какая-либо из задач имеет hours_left = nil. Я проверил наличие hours_left и все.

person Manuel M    schedule 29.09.2009