Named Scope для поиска только первых результатов объединенной таблицы - PullRequest
1 голос
/ 01 февраля 2011

У меня проблемы с именованной областью, 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 работает, за исключением того, что возвращает машины, у которых есть ЛЮБЫЕ неудачные тесты.Мне нужно, чтобы он возвращал машины, которые не прошли только самый последний (LAST) тест.

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

Именованная областьДиаграмма

любая помощь будет большой благодарностью.

Ответы [ 2 ]

0 голосов
/ 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]

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

Этот связанный с этим вопрос поставил меня на правильный путь: хитрыйименованная область в RoR

0 голосов
/ 01 февраля 2011

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

named_scope :last_test_failed, :joins => :last_test, :conditions => [ "lodged_tests.is_passed = ?", false], :order => "created_at desc", :limit => 1
...