Searchkick с Ролифи

У меня есть приложение Rails 4, и я пытаюсь найти свою модель Task с помощью гема Searchkick. Но я хочу, чтобы результаты поиска включали только задачи, для которых у текущего пользователя есть определенная роль Rolify. По сути, пользователь не может искать Задачи других пользователей.

В драгоценном камне Rolify есть метод для получения задач, для которых у текущего пользователя есть определенная роль.

Task.with_role(:viewer, current_user) #=> Tasks where the current user has a viewer role.

Я не могу понять, как отфильтровать результаты Searchkick, чтобы искать только задачи, возвращенные в приведенном выше коде. Я хочу сделать что-то вроде этого,

Task.with_role(:viewer, current_user).search("foo") #=> Returns all Tasks that match foo

Но он включает все задачи, соответствующие foo, а не только задачи текущего пользователя, соответствующие foo. Я знаю, что существует таблица UsersRoles, которую Rolify использует для связи пользователей и ролей, но я не знаю, как связать ее с ролями модели задач.

Можно ли искать роли модели задачи для определенной роли, принадлежащей текущему пользователю, в запросе Searchkick?


person ionylion    schedule 28.10.2015    source источник


Ответы (1)


Попробуйте использовать для этого функцию records Searchkick/elaticsearch-rails.

Task.search("foo").records.with_role(:viewer, current_user)

records преобразует результаты в область where(id: [ids, matching, the, elasticsearch, query]), в которую можно добавлять другие запросы.

person Benjamin Manns    schedule 28.10.2015
comment
К вашему сведению, records теряет оценку Elasticsearch. - person BigRon; 21.11.2017