[英]Rails 5: if many params
這是編寫可容納多個參數查詢的索引方法的最佳方法嗎?
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
當有兩個時,我的方法似乎沒有抓住參數。
我會使用ActionController::Parameters#slice
:
post_parmas = params.slice(:user_id, :status)
post_params.empty? ? Post.all : Post.where(post_params)
您的代碼問題:如果具有:user_id
或:status
鍵,那么您將跳過所有其他邏輯,包括兩個參數存在檢查。 首先檢查兩個參數(條件3)。
這對你有用
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.