0

mit habe ich eine Rails-Anwendung mit dem folgenden Setup:Rails 5 Abfrage, wenn sowohl einzelne als auch mehrere Assoziationsbeziehungen

class Organization < ApplicationRecord 
    has_many :user_orgs 
    has_many :users, :through => :user_orgs 
end 

class UserOrg < ApplicationRecord 
    # organization_id  :integer 
    # user_id :integer 
    belongs_to :organization 
    belongs_to :user 
end 

class User < ApplicationRecord 
    # car_id :integer 
    has_many :user_orgs 
    has_many :organizations, :through => :user_orgs 
    belongs_to :car 
end 

class Car < ApplicationRecord 
    # brand :string 
    has_many :users 
end 

Was ich versuche zu tun, um eine Rails 5 Abfrage zu schreiben, so dass es alle Organisationen zurück wo ein bestimmtes Autoattribut gesetzt ist, dh alle Organisationen zurückgeben, wo es einen Benutzer gibt, der ein Auto mit einer bestimmten Marke hat.

Wie kann ich der Car-Klasse in der Organisation bei der Abfrage beitreten? Derzeit suche ich für Organisationen basierend auf User-Kriterien, indem Sie die folgenden Aktionen ausführen:

Organization.joins(:users).where("users.name = ?", name) 

Aber ich möchte in der Lage als auch Auto Kriterien für die Abfrage hinzuzufügen.

Antwort

0

Wie wäre es this-

###add this scope in Organisation model that has - has_many :users 
scope :get_users_by_carBrand, -> (brand) { includes(:cars).where(:cars=> {:name => brand} } 

###this is the select query 
Organization.includes(:users).get_users_by_carBrand("BMW") 
+0

verwenden, wie sie nur für Nutzer mit einem bestimmten Namen, nicht ein Auto mit einem bestimmten Namen suchen würde aussieht? – Hawkeye001

+0

Ich habe meine Antwort aktualisiert ... bitte überprüfen – Milind

+0

Sorry @Milind, ich hatte einen Fehler in meiner Frage (die Auto/Benutzer-Verbände wurden umgekehrt; behoben in der ursprünglichen Zusammenfassung jetzt), also basierend auf der tatsächlichen Struktur, würde diese Lösung nicht nicht bewerben. – Hawkeye001

Verwandte Themen