微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

mysql-从条件中删除搜索字符串/查询属性以进行多属性搜索.从条件中删除空白参数的空白属性

我想从具有多个参数的“产品”表中搜索产品,但是我只想搜索那些参数而不是空白.我为此使用此查询.

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

我想要这样
如果@ 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

                                              }"
                                         ]

但这并没有给出我想要的结果,我的意思是返回错误的结果.

解决方法:

现在对我来说,技巧是使用强参数

@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

删除了空白参数的属性.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐