2017-03-22 184 views
1

我有一個現有的軌查詢,但它不與mongoid。我的工作需要這樣轉換,它與mongoid轉換軌查詢到mongoid查詢

這裏的工作原理是查詢

scope :between, -> (sender_id,recipient_id) do 
    where("(conversations.sender_id = ? AND conversations.recipient_id =?) OR (conversations.sender_id = ? AND conversations.recipient_id =?)", sender_id,recipient_id, recipient_id, sender_id) 
end 

我是新來mongoid我試過,但沒能找到合適的解決方案

Mongoid 3.4.2 
Rails 5.0.1 
ruby '2.3.0' 

回答

1

假設的聲明是對話模式:

scope :between, -> (sender_id,recipient_id) do 
    any_of({sender_id: sender_id, recipient_id: recipient_id}, {sender_id: recipient_id, recipient_id: sender_id}) 
end 

更新:

使用in運營商,將覆蓋您的查詢,以及,但將包括sender_id: sender_id, recipient_id: recipient_id不需要的情況下,另一種解決方案。

scope :between, -> (sender_id, recipient_id) do 
    args = [sender_id, recipient_id] 
    where(:sender_id.in => args , :recipient_id.in => args) 
end 

我會選擇第一個選項,但第二個可以做的伎倆,以及如果你確定你對價值是每個模型唯一的。

+0

謝謝你的工作 – user6551529