0

Bei einem List Modell mit den folgenden Verbänden:Rails Assoziation mit OR

has_many :list_group_memberships, dependent: :destroy 
has_many :groups, through: :list_group_memberships 
has_many :users, -> { unscope(:order).uniq }, through: :groups, source: :users 

Grundsätzlich muss ich folgendes aber als Active :: Relation zurückzukehren, kein Array:

def users 
    super + [user] 
end 

Idealer würde die users Beziehung einen or Bereich verwenden, aber ich kann es nicht erarbeiten.

Antwort

1

geschrieben benutzen zu können Sie dies ohne die Vereinigung gem tun könnte :

# app/models/list.rb 
def users_with_current_user 
    # Assuming `users` is the has_many :users relation on the list 
    # and `user` is a belongs_to relation on this list... 
    User.where(id: users).or(User.where(id: user)) 
end 

Dies wird ein INNER JOIN auf der list_group_memberships Tabelle automatisch erstellen.

+0

Es gibt keine Relation 'group', es ist ein' has_many: groups'. –

+0

Ich habe gerade die Antwort aktualisiert, ist das näher? – mysmallidea

+0

Das ist großartig, danke! Ich ging mit 'User.where (id: super) .oder (User.where (id: user)) .uniq' –

0

habe ich es geschafft, es zu lösen, die active_record_union gem verwenden und die folgenden:

def users 
    super.union(User.where(id: user_id)) 
end 

EDIT: Ich meine Implementierung geändert, um die Lösung von @mysmallidea

Verwandte Themen