Die anderen Nutzer scheinen die Schienen 3 Tag vernachlässigt haben (da auf der Grundlage der genehmigten Antwort entfernt Meine Antwort für die Nachwelt links.): Bitte versuchen Sie diese
User.where("id NOT IN (?)",Teacher.pluck(:user_id).join(","))
Dies wird SELECT * FROM users WHERE id NOT IN (....)
(zwei Abfragen werden eins zu Holen Sie sich die user_id
von den Lehrern und eine andere, um die user
(s) nicht in der Liste zu bekommen) und kann basierend auf der Größe der Lehrer Tabelle fehlschlagen.
Andere Option ist eine Arel Tabelle:
users = User.arel_table
User.where(users[:id].not_in(Teacher.select(:user_id).where("user_id IS NOT NULL")))
Dieses ähnlich eine einzelne Abfrage erzeugen sollte
SELECT * FROM users
WHERE id NOT IN (SELECT user_id FROM teachers WHERE user_id IS NOT NULL)
(eine Abfrage bessere Leistung) * Syntax nicht vollständig
getestet wurde eine weitere einzelne Abfrage-Option könnte
User.joins("LEFT OUTER JOIN teachers ON teachers.user_id = users.id").
where("teachers.user_id IS NULL")
sein 0
Sind Sie sicher, dass Sie nicht "Datenbanktabelle" statt "Datenbank" meinen? –
Hoppla. Das ist es was ich meinte. Ich bin ein Rails Newbie. Also, ich benutze es alle austauschbar –