Запрос пустого Datamapper имеет n отношений

В моем приложении Rails есть две модели: Briefing и Company. У брифинга есть n, :companies, :through => Ресурс и у Компании есть n, :briefings, :through => Ресурс.

Я пытаюсь найти все брифинги, с которыми не связаны никакие компании. В качестве неправильного кода это может выглядеть примерно так:

Briefing.all( :companies => nil )

or

Briefing.all( :companies.eql => [] )

но, конечно, они не работают. Есть предположения?


person Chris Cummer    schedule 08.04.2011    source источник
comment
Не совсем то же самое - у одного есть отношение has n, own_to, и в этом случае поиск в пустом столбце id в классе contains_to тривиален. В моем случае два имеют n отношений через ресурс, что означает отсутствие столбца идентификатора ни в одной из моделей.   -  person Chris Cummer    schedule 09.04.2011
comment
Я думаю, что может быть ошибка с этим типом соответствия и ассоциациями m:m. Однако он должен работать с промежуточными ассоциациями 1:m.   -  person dkubb    schedule 09.04.2011


Ответы (1)


Я считаю, что Дэн просто ввел изменение, которое позволяет выполнять такой запрос. Итак, если у вас есть User.has n, :posts и вы запускаете такой запрос:

User.all(:posts => nil)

Тогда сгенерированный SQL будет выглядеть так:

SELECT "id" FROM "users" WHERE NOT("id" IN (SELECT "user_id" FROM "posts")) ORDER BY "id"

Это будет доступно в DataMapper 1.1.1.

person solnic    schedule 09.04.2011
comment
На самом деле я не уверен, что это одно и то же. Этот коммит был больше предназначен для совпадений типа gte/gt/lte/lt, где кто-то использовал nil в качестве значения для сопоставления. И это действительно повлияло только на сопоставление в памяти. - person dkubb; 09.04.2011