Именованная область для поиска только первых результатов объединенной таблицы

У меня проблемы с именованной областью, SQL не моя сильная сторона.

Я хотел бы вернуть ВСЕ машины, на которых ПОСЛЕДНИЙ тест не прошел.

Модель моей машины:

  has_many :lodged_tests, :dependent => :destroy
  has_one :last_test, :class_name => 'LodgedTest', :order => 'created_at DESC'

  named_scope :last_test_failed, :joins => :last_test, :conditions => [ "lodged_tests.is_passed = ?", false]

named_scope действительно работает, за исключением того, что он возвращает машины, у которых есть ЛЮБЫЕ неудачные тесты. Мне нужно, чтобы он возвращал машины, которые не прошли только самый последний (ПОСЛЕДНИЙ) тест.

Ниже приведена ссылка на краткую диаграмму того, что я пытаюсь сделать.

Диаграмма именованной области

любая помощь будет большим спасибо.


person David Barlow    schedule 01.02.2011    source источник


Ответы (2)


Вы пытались добавить ограничение в 1?

named_scope :last_test_failed, :joins => :last_test, :conditions => [ "lodged_tests.is_passed = ?", false], :order => "created_at desc", :limit => 1
person Jeff Paquette    schedule 01.02.2011
comment
спасибо за вашу помощь, я только что попробовал предложение, и, похоже, оно возвращает один последний неудачный тест во всей учетной записи. Мне нужно, чтобы он возвращал несколько результатов. - person David Barlow; 01.02.2011
comment
А, ты сказал, что тебе нужен ПОСЛЕДНИЙ проваленный тест. Снимите лимит и оставьте заказ до. - person Jeff Paquette; 01.02.2011
comment
Я приложил диаграмму к моему вопросу, чтобы помочь объяснить немного больше, что я пытаюсь сделать. - person David Barlow; 01.02.2011

Я понял, как добиться желаемого результата с помощью SQL, не очень похожего на рельсы, но он выполняет свою работу.

необходимо включить ограничение 1 в подвыборке в условиях.

named_scope :last_test_failed, :conditions => ["(SELECT is_passed FROM lodged_tests WHERE lodged_tests.machine_id = machines.id ORDER BY created_at DESC LIMIT 1) = ?", false]

Если кто-нибудь знает, как выполнить этот запрос, используя функции области рельсов, мне было бы очень интересно увидеть пример.

Это связано с С.О. вопрос поставил меня на правильный путь: ">сложная именованная область действия в RoR

person David Barlow    schedule 02.02.2011