gpt4 book ai didi

ruby-on-rails - thinking_sphinx 返回一个数组

转载 作者:太空宇宙 更新时间:2023-11-03 18:17:59 27 4
gpt4 key购买 nike

我有一个基于 thinking-sphinx 的带有搜索结果的 Controller 。 find_kind_cdfind_category_ids 都是 sphinx 作用域。

@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)

最佳答案

搜索结果不能是 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)

关于ruby-on-rails - thinking_sphinx 返回一个数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23110223/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com