使用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
写这个并不理想,因为它很难看。有更好的方法吗?
答案 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 a
和c
,则您需要返回a
和c
。您实际上正在做的是通过request.POST
获取POST变量,如果存在任何参数,则将其置于模型代码中的自定义搜索算法中。
从那里你将切割params散列,将键作为你想要获得的特定键值对的参数。
如果您不希望特别不希望params[:a]
和params[:c]
返回任何内容,您只需将unless
语句中的where包装在{{1检查params散列是否同时具有两个键的方法。
key?