2010-08-27 30 views
5

我試圖在ActiveRecord 3中創建'OR'sql語句,我嘗試了所有種類的變體,但無法弄清楚...如何在ActiveRecord中創建'OR'語句?

例如,我希望此查詢包含多個'channel_ids'和讓它返回任何渠道ID的所有帖子。這適用於一個:

Post.where(:user => 'mike').where(:channel_id => 0).limit(20) 

但我無法弄清楚如何使用倍數做到這一點,我已經試過例如:

Post.where(:user => 'mike').where(:channel_id => ?, [0,1,2,3]).limit(20) 

,但沒有奏效。我該如何做這項工作?

回答

4

使用Arel的方法來做到這一點:

t = Post.arel_table 
ids = [1,2,3] 

Post.where(
    t[:user].eq("mike").or(t[:channel_id].in(ids)) 
) 
+0

作品完美,非常感謝。之前聽說過Arel,現在會閱讀它。太整潔了。 – 2010-08-29 15:34:36

4

試試這個:

Post.where("posts.user = ? OR posts.channel_id IN (?)", "mike", ids) 
+1

你應該讓ActiveRecord的逃脫列出了你,而不是自己動手。您可以將'ids'保持原樣,不需要'join',它會自動擴展爲逗號分隔的列表。 – tadman 2010-08-27 20:03:35

+1

@tadman,thx,更新了答案。 – 2010-08-27 20:12:27