Rails - 使用模型方法过滤Searchkick结果

时间:2015-03-07 04:27:21

标签: ruby-on-rails elasticsearch searchkick

我在Rails电子商务项目中使用Searchkick。用户可以搜索产品列表。

我有一些条件可以在网站上显示某些产品(例如,如果库存= 0等)。

根据searchkick文档,我在控制器中将搜索方法设为@listings = Listing.search(params[:search])。这可以按预期工作。

在我的列表模型中,我有以下方法来定义哪些列表可以显示。

class Listing < ActiveRecord::Base

    scope :listable, -> { 
    joins("INNER JOIN users
           ON users.id = listings.user_id
           AND users.hidelistings = 'f'") }

    def self.not_expired 
        listable.where('(listings.updated_at >= ? or user_id = ?) and inventory > ?', Date.current - 30.day, 24, 0)
    end

基于以上所述,我希望我的searchkick方法能说@listings = Listing.not_expired.search(params[:search]),但这不起作用。如何告诉searchkick仅显示符合条件的结果?

1 个答案:

答案 0 :(得分:0)

我遇到了同样的问题。最后,必须添加相关字段并将该过滤逻辑包括到Searchkick查询中。

但是,那真的很好。因为它超快,只需使用弹性搜索即可搜索。否则,当数据变大时,在两个服务器上运行两个查询是不必要的开销。

在第一个解决方案中,我手动选择了经过过滤的id,并将其传递给elasticsearch where子句,我们遇到了很多问题。