我想从Product表中搜索带有多个参数的产品,但我只想搜索那些非空白的参数。我正在使用此查询。
@search_result = Product.where(:status_id=>1,:brand_id => @brand_id, :product_name_id => @product_name_id, :size_id => @product_size_id, :product_type_id => @product_type_id )
我希望这样
if @ product_name_id.blank?然后查询应该像
@search_result = Product.where(:status_id=>1,:brand_id => @brand_id, :size_id => @product_size_id, :product_type_id => @product_type_id )
应从查询中删除@product_name_id。我也试过了
@search_result = Product.find_by_sql [
"SELECT * FROM products WHERE status_id = ? AND brand_id > ? AND product_name_id > ? AND size_id > ? AND product_type_id > ? AND grade > ? ",
"#{1}",
"#{ unless @brand_id.blank?
@brand_id
end
}",
"#{ unless @product_name_id.blank?
@product_name_id
end
}",
"#{ unless @product_size_id.blank?
@product_size_id
end
}",
"#{ unless @product_type_id.blank?
@product_type_id
end
}",
"#{ unless @grade.blank?
@grade
end
}"
]
但它并没有给出我想要的结果,我的意思是返回错误的结果。
答案 0 :(得分:4)
现在我的诀窍是使用强参数
@search_result =Product.where(search_params)
和
def search_params
my_where_params = params.permit(:product_type_id, :brand_id,:product_name_id,:grade,:size_id).select {|k,v| v.present?}
end
删除了空白参数的属性。