2013-11-09 41 views
1

我正在使用PublicActivity gem,並希望將兩個「where」查詢與OR結合使用。每個查詢單獨工作:如何將ActiveRecord查詢與或

@activities = PublicActivity::Activity.where(owner_id: current_user.friend_ids, owner_type: "User") 

@activities = PublicActivity::Activity.where(recipient_id: current_user.id, recipient_type: "User") 

的目標是:

回報的活動,其中owner_id是current_user.friend_ids OR recipient_id是current_user.id。我試過,但沒有奏效:

@activities = PublicActivity::Activity.where("owner_id LIKE ? OR recipient_id LIKE ?', current_user.friend_ids, current_user.id) 

我已經嘗試過了squeel寶石和也是在(...)or.where(...)

任何建議?

+2

是'current_user.friend_ids'返回值的數組?如果是這樣,我相信你想使用'IN'而不是'LIKE',比如'owner_id IN(?)'。另外,你說:「我嘗試過,但沒有奏效」;你能描述一下什麼是行不通的嗎?你有錯誤嗎?是不正確的結果返回?沒有結果返回?等 –

+0

檢查https://github.com/oelmekki/activerecord_any_of – apneadiving

+0

@Teeg是的,friend_ids返回一個值的數組,它與owner_id IN(?)一起工作!謝謝 – crispychicken

回答

0

這工作:

where("owner_id IN (?) OR recipient_id IN (?)', current_user.friend_ids, current_user.id) 
+0

繼續操作,並接受您的答案。 –

0

like OR like是臭名昭著的錯誤結果,誤報等

如何使用:

@activities1 = PublicActivity::Activity.where(owner_id: current_user.friend_ids, owner_type: "User") 

@activities2 = PublicActivity::Activity.where(recipient_id: current_user.id, recipient_type: "User") 

@activities=(@[email protected]).sort.unique 
因爲

或將有效地在不同的兩個記錄集。 (剛添加.sort.uniq)

+0

在'或'中也出現了錯誤的結果,例如.etc ...? – crispychicken