Heim >Datenbank >MySQL-Tutorial >Wie finde ich mit ActiveRecord nicht eingeschriebene Kurse in einer Rails-Anwendung?

Wie finde ich mit ActiveRecord nicht eingeschriebene Kurse in einer Rails-Anwendung?

Barbara Streisand
Barbara StreisandOriginal
2024-12-30 12:21:09282Durchsuche

How to Find Unenrolled Courses in a Rails Application Using ActiveRecord?

Abrufen von Kursen, die nicht mit der Einschreibung eines Studenten verknüpft sind

Frage:

Verwenden einer Rails-Anwendung mit den folgenden Modellen: Student , Kurs und StudentEnrollment, wie kann ich eine Liste von Kursen in der Tabelle „Kurse“ abfragen, die keinem Studenten zugeordnet sind? StudentEnrollment-Tabelle?

Lösung:

Um dies zu erreichen, können Sie die JOIN-Operation in ActiveRecord verwenden. Im Gegensatz zur Methode „joins()“, die einen Tabellennamen als Argument akzeptiert, können Sie jedoch auch eine unformatierte SQL-Zeichenfolge übergeben, um benutzerdefinierte Join-Bedingungen anzugeben.

Insbesondere für die angegebene Abfrage:

SELECT *
FROM Courses c LEFT JOIN StudentEnrollment se ON c.id = se.course_id
WHERE se.id IS NULL AND se.student_id = <SOME_STUDENT_ID_VALUE> and c.active = true

In Rails können Sie diese Abfrage wie folgt ausführen:

Course.joins("LEFT JOIN student_enrollments ON courses.id = student_enrollments.course_id")
      .where("student_enrollments.id IS NULL AND student_enrollments.student_id = ?, courses.active = ?", <SOME_STUDENT_ID_VALUE>, true)

Diese Abfrage ruft alle Kurse ab, die nicht mit dem angegebenen Studenten in verknüpft sind student_enrollments-Tabelle und stellt gleichzeitig sicher, dass nur aktive Kurse enthalten sind.

Das obige ist der detaillierte Inhalt vonWie finde ich mit ActiveRecord nicht eingeschriebene Kurse in einer Rails-Anwendung?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn