2013-04-22 64 views
1

假設用戶有兩個範圍,「non_member」和「new_user」。我想要或他們,包括連接和訂單。你如何「或」一個兩個或多個範圍

我試圖提取where子句構建一個或聲明瞭兩個範圍。但是,聯合和訂單不包括在內。

例如

non_member_where = User.non_member.where_values.reduce(:and) 
new_user_where = User.new_user.where_values.reduce(:and) 

@users = User.where("#{non_member_where} OR #{new_user_where}") 

非成員範圍需要加入成員資格表。如果你上面的代碼,那不加入,因爲它只涉及到哪裏。

有沒有更好的方法如何「或」兩個範圍?喜歡的東西

@users = User.non_member.or.new_user 

該輸出是這樣的:

SELECT users.* FROM users LEFT JOINS memberships ON memberships.user_id = users.id 
    WHERE((memberships.user_id IS NULL) OR (users.created_at < {{2 days ago}}) 

我使用的軌道3.2.12

+0

我想最近做到這一點,積極發現記錄有或較差的支持。最近可能已經改變。你在用什麼Rails版本? – 2013-04-22 09:32:41

+4

https://coderwall.com/p/33rwgw?i=2&p=1&q=author%3Aoelmekki&t%5B%5D=oelmekki – apneadiving 2013-04-22 09:53:51

+0

使用rails 3.2.12 – user181677 2013-04-22 09:58:59

回答

0

ActiveRecord的是建立在一個名爲AREL庫頂。 您可以下拉到AReL表並獲得此功能。

或者,您可以使用Squeel gem,它可以做同樣的事情,但會爲您提供更高級別的API。

退房squeel:https://github.com/ernie/squeel