Другой, более простой подход заключается в использовании join
интерфейса запроса ActiveRecord в сочетании с ARel для условного оператора:
joins(:user)
.where(User.arel_table[:name].matches("%#{query}%"))
Создает следующий sql в sqlite3:
"SELECT \"patients\".* FROM \"patients\" INNER JOIN \"users\" ON \"users\".\"id\" = \"patients\".\"user_id\" WHERE (\"users\".\"name\" LIKE '%query%')"
И следующий sql в postgres (обратите внимание на ILIKE):
"SELECT \"patients\".* FROM \"patients\" INNER JOIN \"users\" ON \"users\".\"id\" = \"patients\".\"user_id\" WHERE (\"users\".\"name\" ILIKE '%query%')"
Это позволяет вам с легкостью присоединиться, но все же получить абстракцию средства сопоставления ARel к вашей RDBMS.