【发布时间】:2018-12-12 03:20:55
【问题描述】:
我正在创建一个搜索页面,其中有几个过滤器,我正在尝试将它们与 Searchkick 集成以查询产品。
这些是我用于产品的范围
models/product.rb
scope :in_price_range, ->(range) { where("price <= ?", range.first) }
scope :in_ratings_range, -> (range) { where("average_rating >= ?", range.first) }
def self.with_all_categories(category_ids)
select(:id).distinct.
joins(:categories).
where("categories.id" => category_ids)
end
这是我实际调用作用域的地方
控制器/search_controller.rb
@results = Product.search(@query)
@results = @results.with_all_categories(params[:category_ids]) if params[:category_ids].present?
@results = @results.in_price_range(params[:price]) if params[:price].present?
@results = @results.in_ratings_range(params[:rating]) if params[:rating].present?
运行后,我收到一条错误消息,提示 searchkick 模型没有任何与我的作用域名称相同的方法。
#Searchkick::Results:0x00007f4521074c30 的未定义方法 `with_all_categories'>
如何在搜索查询中使用范围?
【问题讨论】:
-
range范围内的参数in_price_range和in_ratings_range未正确使用。如果您在查询中仅使用range.first,那么为什么要传递整个范围? -
你能显示确切的错误信息吗?
-
代码目前是这样的,因为我计划将来将其更改为实际范围,但现在我正试图让它工作
-
我收到此错误消息:#<:results:0x00007f4521074c30> @JagdeepSingh 的未定义方法 `with_all_categories'
标签: ruby-on-rails ruby searchkick scopes