Search code examples
ruby-on-railsruby-on-rails-4mongoidmongoid3

Convert rails query to mongoid query


I have a existing rails query but it doesn't work with mongoid .I need to convert so that it works with mongoid

Here is the query

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

I am new to mongoid I tried but was not able to find suitable solution

Mongoid 3.4.2
Rails 5.0.1
ruby '2.3.0'

Solution

  • Assuming the declaration is in the Conversation model:

    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
    

    Update:

    Another solution using in operator, will cover your query as well but will include unwanted cases of 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
    

    I will prefer the first option, but the second one could do the trick as well if you sure that your pair values are unique for each model.