Пытаюсь реализовать какой-то "умный" поиск с помощью ActiveRecord. Например, у меня есть две модели: User и Practice. Я хочу найти все практики только с активными пользователями.
Я пытаюсь добиться этого следующими способами:
Practice.joins(:users)
.where('LOWER(name) LIKE :search OR (LOWER(users.first_name) LIKE :search OR LOWER(users.last_name) LIKE :search)', search: "%#{params[:search].downcase}%")
.where(users: {removed_at: nil}).distinct.limit(10)
Это дает мне практику со всеми пользователями (как активными, так и удаленными).
Если я попробую другой вариант (используя include() вместо joins()):
Practice.includes(:users).where('LOWER(name) LIKE :search OR (LOWER(users.first_name) LIKE :search OR LOWER(users.last_name) LIKE :search)', search: "%#{params[:search].downcase}%")
.where(users: {removed_at: nil}).distinct.limit(10)
Я получаю правильную структуру объекта, когда имя практики вводится в качестве поискового запроса, но если я использую имя пользователя в качестве параметра поиска - я могу видеть только этого конкретного пользователя внутри практики, и я хочу, чтобы все активные пользователи были найдены практика в таком случае.
Не могли бы вы помочь мне понять, как этого добиться?
Заранее спасибо!