Поиск предметов конкретного пользователя с помощью Searchkick - PullRequest
0 голосов
/ 04 января 2019

Мне нужна возможность поиска определенных предметов пользователя через ассоциации has_many.

Первоначально у меня было searchkick на моей модели Предметов, а теперь оно на моей пользовательской модели. Я также задал вопрос несколько недель назад на этот же вопрос, однако я не получил ответов и с тех пор немного изменил код.

class User < ApplicationRecord
    searchkick
    has_many :items, -> (user) { unscope(:where).where("(consumer_type = ? and consumer_id = ?))", 'User', user.id) }, fully_load: false, dependent: :destroy

    def search_data
        attributes.merge(
            items: library_items.as_json,
        )
    end
end

В моем контроллере мне нужна возможность выполнить запрос, такой как: @results = current_user.items.search('Query'), чтобы я возвращал элементы, к которым имеет доступ только этот пользователь.

В настоящее время, когда я запускаю что-то подобное в консоли rails: user = User.first user.search 'Email' Я получаю "неопределенный метод" поиска для #

Как мне правильно настроить что-то подобное? Должен ли я на самом деле поставить searchkick на модель Item? Если да, то как мне тогда заняться поиском

1 Ответ

0 голосов
/ 05 января 2019

Мой подход заключается в том, чтобы индексировать модель Item с помощью Searchkick, поскольку таким способом легче достичь желаемого результата, особенно если вам нужна только информация об элементах, возвращаемых в ваших результатах (а не обязательно, что пользовательские данные как хорошо).

Затем можно выполнить поиск модели Item, используя что-то вроде:

@results = Item.search(
             'Query',
             where: {consumer_type: 'User', consumer_id: current_user.id},
             load:  false
           )
...