Преобразование запроса rails в запрос mongoid

У меня есть существующий запрос rails, но он не работает с монгоидом. Мне нужно преобразовать его, чтобы он работал с монгоидом.

Вот запрос

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 3.4.2
Rails 5.0.1
ruby '2.3.0'

person user6551529    schedule 22.03.2017    source источник


Ответы (1)


Предполагая, что объявление находится в модели Conversation:

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

Я предпочитаю первый вариант, но второй тоже может помочь, если вы уверены, что ваши парные значения уникальны для каждой модели.

person Vahan Vardanyan    schedule 22.03.2017