【问题标题】:Search for a specific user's items with Searchkick使用 Searchkick 搜索特定用户的项目
【发布时间】:2019-01-04 18:05:51
【问题描述】:

我需要能够通过 has_many 关联搜索用户的特定项目。

我最初在我的 Items 模型上拥有 searchkick,现在在我的 User 模型上拥有它。几周前我也曾向question 询问过同样的问题,但是我没有收到任何回复,并且从那时起我对代码进行了相当多的修改。

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.first user.search '电子邮件' 我得到 # 的“未定义方法“搜索”

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

【问题讨论】:

    标签: ruby-on-rails elasticsearch searchkick


    【解决方案1】:

    我的方法是使用 Searchkick 索引 Item 模型,因为这样更容易实现您想要的结果,特别是如果您只需要有关结果中返回的项目的信息(而不一定是用户数据作为好)。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多