Rails中的SQL查询取决于是否存在params

时间:2017-03-21 17:44:09

标签: mysql ruby-on-rails

使用Rails 4和MySQL。我有以下内容:

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

写这个并不理想,因为它很难看。有更好的方法吗?

1 个答案:

答案 0 :(得分: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散列,将键作为你想要获得的特定键值对的参数。

如果您不希望特别不希望params[:a]params[:c]返回任何内容,您只需将unless语句中的where包装在{{1检查params散列是否同时具有两个键的方法。

key?