Mit Rails 4, und angesichts der folgenden Modelle:Suche Datensätze ohne has_many: durch Aufzeichnung Kriterien
class Draft < ActiveRecord::Base
has_many :drafters
has_many :users, through: :drafters
end
class Drafter < ActiveRecord::Base
belongs_to :draft
belongs_to :user
end
class User < ActiveRecord::Base
has_many :drafters
has_many :drafts, through: :drafters
end
Wie kann ich alle Entwürfe abrufen, die current_user
nicht mit dem User-Instanz zugeordnet? Das heißt, alle Entwürfe d
, für die es keinen Drafter zu d
und current_user
gibt.
Ich habe Squeel verfügbar, wenn es hilft.
Dies funktioniert nicht ganz. Erstens findet es keine Entwürfe, die überhaupt keinen Zeichner haben. Zweitens, die Verwendung von es produziert eine Vernachlässigung: 'DEPRECATION WARNING: Es sieht so aus, als ob Sie eifrig Tabellen laden (eine von: Entwürfen, Verfasser), die in einer Zeichenfolge SQL-Schnipsel verwiesen werden. - Volltext [hier] (https: //gist.githubusercontent.com/asilano/823cb76f7b29af02f2ef41d24b8bc7d3/raw/3bd4470b4eb26a45bc21a4e2b9ba92a82bd31a95/gistfile1.txt) – Chowlett
@Chowlett: Aktualisiert. 'references' entfernt die Verwarnungswarnung (d. h. erzwingt' left join'), während 'is null'-Prüfung Entwürfe ohne Zeichner erlaubt. – potashin
Uh, wow. Das ist viel hässlicher, als ich es erwartet hatte. Warum funktioniert es? Das SQL, das erzeugt wird, ist ein LEFT OUTER JOIN auf Draft <-> Drafter, also sollte Reihen aufstellen, in denen die Drafter Seite abwesend ist. Warum brauche ich 'drafters.user_id ist null ', um die Fälle zu erfassen, in denen keine Drafter-Zeile mit' drafter.draft_id' übereinstimmt? – Chowlett