簡體   English   中英

Rails 5:如果有很多參數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM