我有三个可选参数param1
,param2
和param3
。用户可以任意组合传递任意数量的文件。
如果所有三个都通过,我可以检查param键是否存在如下:
def index
return unless params.key?(:param1) && params.key?(:param2) && params.key?(:param3)
@test = Model.where(param1: params[:param1],
param2: params[:param2],
param3: params[:param3])
end
但是我不想为其他条件重复相同的代码,例如只传递param1
或传递param1
和param2
或者同一个参数可以传递两次例如:
http://localhost:1000/orders?param1[]=abc¶m1[]=
(传递相同param1的abc和空白值)
<ActionController::Parameters {"pram1"=>["abc", ""], "format"=>:json, "controller"=>"orders", "action"=>"index", "order"=>{}} permitted: false>
有没有更好的方法来检查这些参数的存在,所以我不必重复相同的代码?
答案 0 :(得分:1)
如果要求是:
param1
,param2
或param3
的参数。这可能有用。
conditions = params.select {|k|
[:param1, :param2, :param3].include? k
}.map {|k, v|
[k, Array(v)[0]]
}.to_h
Model.where(**conditions)
答案 1 :(得分:0)
为什么不这样做?
def index
@test = params.empty? ? Model.none : Model.where(params)
end
答案 2 :(得分:0)
尝试以下
def index
par = params.slice(:param1, :param2, :param3).delete_if { |k, v| v.blank? }
return if par.blank?
Model.where(par)
end