In meinem Szenario habe ich ein BlogPost
Modell das has_and_belongs_to_many :categories
. Ich möchte out Blog-Posts filtern, die zu bestimmten Kategorien gehören, während immer noch nicht kategorisierte Blog-Posts möglich sind (daher die Notwendigkeit eines LINKEN OUTER-JOINS).
Ich habe erwartet, dass das funktioniert:
%Vor%Aber es wird nicht richtig gefiltert, weil es die Bedingungen am Ende der Abfrage außerhalb des LEFT OUTER JOIN setzt (siehe diese SO Frage / Antwort für den Grund: SQL-Verknüpfung: where-Klausel vs. on-Klausel )
Das funktioniert, aber es ist hässlich:
%Vor%Gibt es eine ActiveRecord-freundliche Möglichkeit, Bedingungen zu der ON-Klausel eines LEFT OUTER JOIN hinzuzufügen, ohne sie manuell einzugeben, wie ich es getan habe?
Ich denke, das könnte funktionieren.
%Vor% und fügen Sie es zusammen mit einem Bereich hinzu, der alle Blogposts ohne Kategorie enthält. Ein weiterer Gedanke wäre, stattdessen eine has_many through
-Beziehung zu verwenden und tatsächlich ein Modell für BlogPostCategory
zu erstellen, da Sie dazwischenliegende Bereiche hinzufügen können.
Ich bin mit der ActiveRecord-Syntax nicht vertraut, aber können Sie den Filter um Zeilen erweitern, in denen category_id IS NULL
? Das wird Ihre Anforderung erfüllen.
Tags und Links sql ruby-on-rails activerecord join rails-activerecord