这是编写可以容纳多个参数查询的索引方法的最佳方法吗?
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
当有两个时,我的方法似乎没有抓住参数。
答案 0 :(得分:6)
我会使用ActionController::Parameters#slice
:
post_parmas = params.slice(:user_id, :status)
post_params.empty? ? Post.all : Post.where(post_params)
您的代码问题:如果您有:user_id
或:status
个键,则跳过所有其他逻辑,包括params存在检查。检查两个参数(条件#3)应该是第一个。
答案 1 :(得分:0)
这对你有用
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