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

qnyhuwrf  于 2021-06-15  发布在  ElasticSearch
关注(0)|答案(1)|浏览(246)

我需要的能力,搜索用户的特定项目,通过有许多关联。
我本来有 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'我会得到'undefined method'search'for#
我该如何正确地设置这样的东西呢?我真的应该 searchkick 关于物品模型?如果是这样的话,我该怎么去寻找呢

qpgpyjmq

qpgpyjmq1#

我的方法是索引 Item 使用searchkick建模,因为这样更容易获得所需的结果,特别是当您只需要结果中返回的项目的信息(不一定也需要用户数据)时。
然后你可以搜索 Item 使用以下方式建模:

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

相关问题