rails - meta_search没有正确过滤结果

时间:2011-10-04 01:44:24

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

我有一个产品型号,一个类别模型和一个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更好?谢谢。

更新:已解决:

Sooo经过几个小时的考虑,我想通了。我不确定这是解释,但在*删除“:product_categorizations_category_id_equals_any”*中的“any”后,我得到了它的工作。我认为原因是因为这是一个has_many通过关联,category_id不存储为数组,因此“any”不相关。我的解释可能完全没有,但它确实有效。

1 个答案:

答案 0 :(得分:1)

meta_search应该通过关联(还有habtm)为has_many正常工作,例如我有一个用户有很多团队模型在哪里:

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本身,而是其他一些原因(比如表单参数没有被正确接收并传递给搜索,或者关联没有正确定义)。

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