2016-06-22 12 views
1

Ich versuche herauszufinden, wie man einen Bereich schreibt, der das Vorhandensein von zugeordneten Attributen überprüft.Rails 4 - Wie schreibe ich einen Bereich

Der Kern von dem, was ich will, ist ein Bereich in meinem Benutzermodell, um zu versuchen:

scope :onboarded, -> { where ("user.profile_id IS NOT NULL AND user.profile.organisation_id IS NOT NULL") } 

ich ein anderes Modell habe Profil genannt. Die Verbände sind:

User has_one profile 
Profile belongs to User. 

Der obige Rahmen ist in meinem Benutzermodell geschrieben. Es basiert auf einem Vorschlag von diesem Beitrag Rails: Using service class methods in a scope query

Ich bin mir nicht sicher, ob ich versuchen sollte, einen Bereich in meinem Profilmodell zu machen, um zu überprüfen, ob es eine ID oder eine Organisations-ID und dann irgendwie versucht, das in meinem Benutzer zu testen Modell, oder wenn ich Modelle in meinem Benutzerbereich miteinander verketten kann, um dies zu testen.

Antwort

0

Am einfachsten wäre wahrscheinlich, nur joins zu verwenden, da dies innere Joins ausführen wird, da Sie tatsächlich nach vorhandenen Verknüpfungen und nicht nur nach einfachen Attributen suchen.

Betrachtet man auch eine belongs_to Beziehung zwischen profile und organization Sie dies tun könnte:

scope :onboarded, -> { joins(profile: :organization) } 

Diese alle Benutzer mit einem Profil angezeigt werden können, die eine Organisation hat.

+0

Vielen Dank. – Mel