2017-05-25 4 views
0

Ich habe ein Benutzermodell (für die Authentifizierung/Autorisierung) mit einem zugeordneten Profilmodell (für Informationen über den Benutzer, dh Haarfarbe) verwendet.Scope ein Modell auf ein Assoziationsattribut

Ich versuche, einen Bereich zu erstellen, um alle Benutzer mit einem bestimmten Attribut zu finden. dh: alle dunkelhaarigen Menschen (Haarfarbe ist schwarz oder braun) oder alle hellhaarigen Menschen (Haarfarbe ist blond oder silber).

Ich kann alle Profile mit dunklen Haaren finden, aber wie finde ich die zugehörigen Benutzer.

app/models/user.rb:

class User < ActiveRecord::Base 
    has_one :profile 

app/models/profile.rb

class Profile < ActiveRecord::Base 
    belongs_to :user 
    scope :dark_hair, -> { where('hair_color = ? or hair_color = ?', 'black', 'brown' } 
    scope :light_hair, -> { where('hair_color = ? or hair_color = ?', 'blond', 'silver' } 

So kann ich die Profile finden:

irb>> Profile.dark_hair 

Aber ich kann Erhalte die Benutzer (keine davon funktioniert):

irb>> Profile.dark_hair.user 
irb>> Profile.dark_hair.users 
irb>> User.profile.dark_hair 

Wie frage ich nach den Benutzern, die ich will? Oder sollte der Umfang auf dem Benutzer liegen? Ich habe das versucht, konnte aber nicht herausfinden, wie ich es richtig schreiben soll.

Antwort