2017-03-21 74 views
1

使用Rails 4和MySQL。我有以下内容:Rails中的SQL查询取决于是否存在参数

if params[:a].present? && params[:b].present? && params[:c].present? 
    Shop.where("a = ? AND b = ? AND c = ?", params[:a], params[:b], params[:c]) 
elsif params[:a].present? && params[:b].present? 
    Shop.where("a = ? AND b = ?", params[:a], params[:b]) 
elsif params[:a].present? 
    Shop.where("a = ?", params[:a]) 
else 
    Shop.where("z = ?"), params[:z]) 
end 

写这是根本不理想,因为它很丑。有更好的方法吗?

回答

0

控制器代码:

if params[:a].present?|| params[:b].present? || params[:c].present? 
    Shop.custom_search(request.POST) 
else 
    Shop.where("z = ?", params[:z]) 
end 

型号代码:

def self.custom_search(params_hash) 
    where(params_hash.slice("a", "b", "c")) 
    end 

我假设,如果PARAMS ac都存在,你想回到ac。你实际上做的是通过request.POST获取POST变量,如果有任何参数存在,然后将其放入模型代码中的自定义搜索算法中。

从那里你将要切片的参数散列,把键作为你希望得到的特定键值对的参数。

如果你不想特别不想params[:a]params[:c]在所有返回任何东西,你可以只包裹其中,在unless声明,与key?方法上params哈希表是否有这两个键或不检查。

unless params_hash.key?("a") && params_hash.key?("c") 
    where(params_hash.slice("a", "b", "c")) 
end 
相关问题