使用Searchkick搜索特定用户的商品

时间:2019-01-04 18:05:52

标签: ruby-on-rails elasticsearch searchkick

我需要能够通过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模型上?如果是这样,那我该如何搜索

1 个答案:

答案 0 :(得分:0)

我的解决方法是使用Searchkick为Option模型建立索引,因为这样可以更轻松地获得所需的结果,尤其是在您只需要有关结果中返回的项目的信息(而不一定是用户数据)。

然后您可以使用类似以下内容的方法来搜索Predicate<BigDecimal> feeCheck = feePerTransactOrRevenue -> feePerTransactOrRevenue != null && feePerTransactOrRevenue.intValue() < 0; boolean globalRequestCheck = globalPricingRequests.stream() .map(GlobalPricingRequest::getFeePerTransact) .anyMatch(feeCheck); boolean eventTypeCheck = globalPricingRequests.stream() .map(GlobalPricingRequest::getEventTypePricingList) .flatMap(List::stream) .map(EventTypePricingMapping::getFeePerRevenue) .anyMatch(feeCheck); // if any of the element matches the condition, throw the exception if (globalRequestCheck || eventTypeCheck) { throw ExceptionHelper.badRequest("Fee Per Transaction can't be less than zero"); } 模型:

Item