【问题标题】:SQL query in Rails depending if params existRails 中的 SQL 查询取决于参数是否存在
【发布时间】:2017-03-21 17:44:08
【问题描述】:

使用 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

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

【问题讨论】:

    标签: mysql ruby-on-rails


    【解决方案1】:

    控制器代码:

    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
    

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

    从那里您将切分 params 哈希,将键作为您希望获得的特定键值对的参数。

    如果您不想特别不想 params[:a]params[:c] 返回任何内容,您可以将 where 包装在 unless 语句中,使用 key? 方法检查参数是否哈希是否有两个键。

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

    【讨论】:

      猜你喜欢
      • 2015-06-12
      • 1970-01-01
      • 2012-09-01
      • 1970-01-01
      • 2013-08-23
      • 1970-01-01
      • 1970-01-01
      • 2022-01-12
      • 2013-06-05
      相关资源
      最近更新 更多