Как сделать два объединения и выполнить один запрос активной записи, используя ActiveRecord? - PullRequest
1 голос
/ 24 сентября 2019

Я использую MySQL и пытаюсь создать несколько областей поиска пользователя, основываясь на наборе бесед, пользователи и разговоры имеют полиморфную ассоциацию, которая позволяет пользователю создавать и получать беседы.

Область действия «with_conversations» делает то, что я хочу, однако она не очень эффективна, у меня возникают проблемы с выполнением одного запроса вместо двух дополнительных массивов, что вызывает два отдельных запроса.

class User 

  scope :with_received_conversations, -> (conversations) { joins(:received_conversations).where(conversations: { id: conversations, receiver_type: "User" }) }
  scope :with_authored_conversations, -> (conversations) { joins(:authored_conversations).where(conversations: { id: conversations, author_type: "User" }) }
  scope :with_conversations,          -> (conversations) { with_authored_conversations(conversations) | with_received_conversations(conversations) }

end

Я попытался использовать функцию активной записи "or ()", но она возвращает следующую ошибку:

*** ArgumentError Exception: Relation passed to #or must be structurally compatible. Incompatible values: [:joins]

nil

1 Ответ

0 голосов
/ 24 сентября 2019

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

Отношение, переданное в #or, должно быть структурно совместимым.Несовместимые значения: [: reference]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...