2016-10-01 35 views
3

我想从产品表中搜索带有多个参数的产品,但我只想搜索那些不是空白的参数。我为此使用此查询。从多个属性搜索的条件中删除搜索字符串/查询属性。从条件中删除空白参数的空白属性

@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 

               }" 
             ] 

但它不给我想要的结果我的意思是返回错误的结果。

回答

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 

其删除空白PARAMS属性。