Ruby on rails 检查可选参数的存在性
我有三个可选参数Ruby on rails 检查可选参数的存在性,ruby-on-rails,ruby,Ruby On Rails,Ruby,我有三个可选参数param1,param2和param3。用户可以通过任意组合传递任意数量的密码 如果三个都通过了,我可以检查param键是否存在,如下所示: def index return unless params.key?(:param1) && params.key?(:param2) && params.key?(:param3) @test = Model.where(param1: params[:param1],
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[]=
(传递相同参数1的abc和空白值)
[“abc”,“”],“格式”=>:json,“控制器”=>“命令”,“操作”=>“索引”,“命令”=>{}允许:false>
有没有更好的方法来检查这些参数的存在,这样我就不必重复相同的代码了?为什么不这样做呢
def index
@test = params.empty? ? Model.none : Model.where(params)
end
试着跟随
def index
par = params.slice(:param1, :param2, :param3).delete_if { |k, v| v.blank? }
return if par.blank?
Model.where(par)
end
如果要求是:
- 仅处理名为
、param1
或param2
的参数param3
- 即使使用同一个键传递多个值,也只处理第一个值
conditions=params.select{k|
[:param1,:param2,:param3]。包括?k
}.map{k,v|
[k,数组(v)[0]]
}.to_h
型号。其中(**条件)
谢谢。我试过了,但没有成功。请检查更新的问题,你正在尝试做的不会真正发挥好。根据您更新的问题,一个参数可以传递两次,这一事实会导致一个指向数组的散列键,您无法使用ActiveRecordwhere
查询选择干净地调用该散列键。在SQL中思考一下:您将如何编写{:param1=>[“first”,“second”]}其中param1='first'和param1='second'没有任何意义。
我正在使用CGI.parse解析参数,以便能够获得两次传递的相同参数的结果。您的代码工作正常吗?我认为return除非参数key(:param1)和¶ms.key(:param1)和¶ms.key(:param1)
应该是return除非参数key(:param1)| params.key(:param2)| params.key(:param3)
如果所有3个参数都被传递了,那么这只是一种情况,where子句基于传递的内容。我认为在每种情况下都有一个拼写错误param1
,假设它应该是param2
¶m2
,但是在您的代码中,即使param1¶m2存在,但param3不存在,它也会返回。谢谢更新。谢谢你的回复。在Model.where(params)
def index
par = params.slice(:param1, :param2, :param3).delete_if { |k, v| v.blank? }
return if par.blank?
Model.where(par)
end