thinking_sphinx返回一个数组

时间:2014-04-16 13:00:14

标签: ruby-on-rails ruby postgresql sphinx thinking-sphinx

我有一个基于思考sphinx的搜索结果的控制器。 find_kind_cdfind_category_ids都是狮身人面像范围。

@products.search返回一个数组。我需要类似ActiveRecord :: Relation之类的东西,因为我想实现一些方法,比如includesmaximum。如何用数组实现这个方法?

@products = Product.find_kind_cd(Product.product)

@category = Category.find_by(id: params[:category])
@products = @products.find_category_ids(@category.subtree_ids) if @category

@products = @products.search(params[:query]) if params[:query].present?
# TODO includes - bullet gem

@products = @products.page(params[:page]).per(params[:per] || 12)

1 个答案:

答案 0 :(得分:3)

搜索结果不能是ActiveRecord::Relation,因为您要查询Sphinx,而不是数据库。你实际得到的不是一个数组,而是一个ThinkingSphinx::Search的实例,其行为与数组非常相似。

但是,搜索调用会被延迟评估,而pageperThinkingSphinx::Search上可用的方法,因此您可以使用这些方法。至于includes,您需要执行以下操作:

@products = @products.search(:sql => {:include => :category})

虽然没有像maximum这样的东西。但是如果您确实希望基于Sphinx搜索结果从数据库中进行聚合,那么这应该可以解决问题:

Product.where(id: Product.search_for_ids(params[:query]).to_a).maximum(:cost)