我有一个产品型号,一个类别模型和一个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”不相关。我的解释可能完全没有,但它确实有效。
答案 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本身,而是其他一些原因(比如表单参数没有被正确接收并传递给搜索,或者关联没有正确定义)。
建议您首先在模型级别验证搜索(在控制台中使用上述查询进行验证;但最好在项目中对此进行测试)。接下来将确保正确接收参数并将其传递给搜索。