【问题标题】:rails - meta_search not filtering results properlyrails - meta_search 没有正确过滤结果
【发布时间】:2023-04-02 01:16:01
【问题描述】:

我有一个产品模型、一个类别模型和一个 product_categorization 模型(has_many...,通过关联)。我正在使用 meta_search gem 进行产品搜索。出于某种原因,即使我的日志提取了正确的标准,它也没有根据类别过滤产品。无论我选择什么,它总是显示所有产品。

产品控制器:

def update
params[:product][:category_ids] ||= []
@product = Product.find(params[:id])
if @product.update_attributes(params[:product])
 redirect_to @product
else
 render "edit"
end 

产品搜索表:

  <div class="field">
   <%= f.label :category %>
   <%= f.collection_select :product_categorizations_category_id_equals_any, Category.all, :id, :name, :include_blank => true, :prompt => "Select a category" %> 
  </div>   

任何帮助将不胜感激。另外,我可以使用更好的宝石吗?我知道 searchlogic 与 rails 3 不兼容,除非您获得补丁。修补版本的 searchlogic 是不是比 meta_search 更好的选择?谢谢。

更新:已解决:

经过几个小时的思考,我终于明白了。我不确定这是不是解释,但在*从“:product_categorizations_category_id_equals_any”*中删除“任何”之后,我让它工作了。我认为原因是因为这是通过关联的 has_many,category_id 没有存储为数组,因此“any”不相关。我的解释可能完全错误,但它有效。

【问题讨论】:

    标签: ruby-on-rails search has-many-through


    【解决方案1】:

    meta_search 应该可以通过关联对 has_many 正常工作(但也可以使用 habtm),例如我有一个用户有很多团队模型,其中:

    class User < ActiveRecord::Base
      has_many :users_teams, :class_name => 'UsersTeams', :dependent => :destroy
      has_many :teams, :through => :users_teams
    end
    

    以下所有都返回正确过滤的结果:

    User.search :teams_id_equals=>999
    User.search :users_teams_team_id_equals=>999
    User.search :teams_id_equals_any=>[999]
    User.search :users_teams_team_id_equals_any=>[999]
    

    我怀疑您的问题可能不是 meta_search 本身,而是其他一些原因(例如未正确接收并传递给搜索的表单参数,或未正确定义关联)。

    建议您首先在模型级别验证搜索(在控制台中使用上述查询;但最好在您的项目中对此进行测试)。接下来是确保正确接收参数并将其传递给搜索。

    【讨论】:

    • 感谢您的回复。它实际上只需要我从“product_categorizations_category_id_equals_any”中删除“any”。我认为只有在有数组时才可能需要任何东西?不确定。
    • 啊,有道理!是的,_any 需要一个数组,就像你有一个多选列表一样
    猜你喜欢
    • 2016-09-26
    • 2015-07-09
    • 2011-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-08
    相关资源
    最近更新 更多