2016-03-30 6 views
0

Ich versuche, einige zufällige Benutzer mit dem randumb Edelstein zu wählen. Mein Controller-Code sieht wie folgt aus:Rails: Auswahl zufälliger Benutzer außer current_user

@random_users = User.order_by_rand.limit(3).all

Diese Suche derzeit die current_user in den Zufallsergebnisse enthält. Wie kann ich das ausschließen? Ich habe versucht, eine Extra-Bedingung einfügen id: !current_user.id, aber es scheint nicht zu funktionieren.

Antwort

2

Sie können einen Datensatz von Ihrer Abfrage ausschließen, indem Sie NOT SQL queries verwenden.

User.where.not(id: current_user.id).order_by_rand.limit(3) 

Und wenn diese wiederverwendbar sein wird, können Sie voran gehen und einen einfachen Rahmen schaffen wie unten:

# user.rb 

# ex: User.exluding(current_user).order_by_rand.... 
scope :excluding, (lambda do |user| 
    return all unless user.present? 
    where.not(id: user.id) 
end) 

Die Leute bei Thoughtbot haben auch eine great article auf diese Art von Anfragen.

aktualisieren von Ihren Kommentar unten:

Anhänger auszuschließen:

# user.rb 

# This will also exclude the user you pass in. 
# so you will not need to chain the original scope `excluding`. 
scope :recommended_users, (lambda do |user| 
    return all unless user.present? 
    where.not(id: user.following_ids << user.id) 
end) 
+0

das funktioniert, aber wie wäre es auch der Suche nach Benutzern, die der aktuelle Benutzer folgende nicht wahr? Ich versuche etwas wie '.followers.include (! Current_user)' aber das scheint nicht zu funktionieren. Muss ich über jeden Benutzer iterieren, wie in 'do | user | ... '? Ich benutze das 'acts_as_follower'-Juwel hier –

+1

@omegalo, siehe aktualisierte Antwort. Dies setzt voraus, dass Sie eine Beziehung "folgend" haben, die die Benutzer darstellt, denen ein Benutzer folgt. –

+0

Dies scheint den aktuellen Benutzer auszuschließen, aber 'following_ids' gibt in der Konsole kein Nil zurück, obwohl 2 andere Benutzer folgen; die Benutzer, denen ich folge, tauchen immer noch auf ... irgendwelche Ideen? –

Verwandte Themen