Я использую 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