2016-03-30 17 views
0

randumb gem kullanarak bazı rasgele kullanıcılar seçmeye çalışıyorum. Benim denetleyicisi kodu şöyle:Raylar: current_user dışındaki rastgele kullanıcıları seçme

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

Bu arama şu anda rastgele sonuçlarında current_user kapsamaktadır. Bunu nasıl hariç tutabilirim? Ekstra koşulu id: !current_user.id kullanmayı denedim, ancak işe yaramıyor.

cevap

2

NOT SQL queries'u kullanarak sorgunuzdan bir kaydı hariç tutabilirsiniz.

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

Ve bu eğer

yeniden kullanılabilir olacak, sen devam et ve aşağıda gibi basit kapsamı oluşturabilirsiniz: Thoughtbot de

# 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) 

millet de sorguları bu tür bir great article var. Aşağıdaki yorum yapmaktan

Güncelleme:

takipçileri dışlamak için:

çalışır, ama nasıl da bulmakta kullanıcılar hakkında geçerli kullanıcı kim takip etmiyor
# 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

? .followers.include (! Current_user) 'gibi bir şey deniyorum ama işe yaramıyor. Her kullanıcı üzerinde, 'do | user | ... '? Ben burada –

+1

@omegalo 'acts_as_follower' gem kullanıyorum, güncellenmiş cevabı görüyorum. Bu, bir kullanıcının izlediği kullanıcıları temsil eden bir ilişki olduğunu varsayalım. –

+0

Bu, geçerli kullanıcıyı dışarıda bırakıyor gibi görünüyor, ancak diğer 2 kullanıcıyı takip etmesine rağmen 'after_ids' konsolda sıfır döndürüyor; izlediğim kullanıcılar hala ortaya çıkıyor .. herhangi bir fikir? –

İlgili konular