使用 Searchkick 搜索特定用户的项目

Search for a specific user's items with Searchkick

我需要能够通过 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'),以便我 return 只有该用户有权访问的项目。

目前,当我在 rails 控制台中 运行 这样的事情时: 用户 = User.first user.search 'Email' 我得到 `undefined method 'search' for #

我该如何正确设置这样的东西?我真的应该把 searchkick 放在 Item 模型上吗?如果是这样,我将如何着手搜索

我的方法是使用 Searchkick 为 Item 模型编制索引,因为这样更容易获得所需的结果,特别是如果您只想要有关结果中返回的项目的信息(而不是也必须是用户数据)。

然后您可以使用类似以下内容搜索 Item 模型:

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