代码之家  ›  专栏  ›  技术社区  ›  t56k

Rails 5:if多个参数

  •  0
  • t56k  · 技术社区  · 8 年前

    这是编写可以容纳多个param查询的索引方法的最佳方法吗?

    if params.key?(:user_id)
      Post.where(user_id: params[:user_id])
    elsif params.key?(:status)
      Post.where(status: params[:status])
    elsif params.key?(:user_id) && params.key?(:status)
      Post.where(user_id: params[:user_id], status: params[:status])
    else
      Post.all
    end
    

    当有两个参数时,我的方法似乎无法捕捉到参数。

    2 回复  |  直到 8 年前
        1
  •  6
  •   Ilya    8 年前

    我会使用 ActionController::Parameters#slice :

    post_parmas = params.slice(:user_id, :status)
    post_params.empty? ? Post.all : Post.where(post_params)
    

    你的代码问题:如果你有 :user_id :status 键,您将跳过所有其他逻辑,包括两个参数的存在性检查。应首先检查两个参数(条件#3)。

        2
  •  0
  •   Satishakumar Awati    8 年前

    这对你有用

    if params.key?(:user_id) && params.key?(:status)
      Post.where(user_id: params[:user_id], status: params[:status])
    elsif params.key?(:user_id)
      Post.where(user_id: params[:user_id])
    elsif params.key?(:status)
      Post.where(status: params[:status])
    else
      Post.all
    end
    

    如果需要在基于参数的查询中添加多个条件,可以使用以下方法。请小心SQL注入。

    condition = ""
    if(params[:user_id].blank? and params[:user_id].blank?)
        Post.all
    else
        condition += "user_id=#{params[:user_id]}" if params.key?(:user_id)
        condition += " AND status=#{params[:status]}" if params.key?(:status)
        Post.where("#{condition}")
    end
    
    推荐文章