首页 > 解决方案 > 如何检查“params [:attribute]”中是否存在任何值

问题描述

当我有一个这样的数组时:

[5] pry(#<HomeController>)> params["search"]["sources"] => [""]

如何检查该实例是否为真?

我尝试了以下方法,但失败了:

[8] pry(#<HomeController>)> params[:search][:sources].empty?
=> false
[9] pry(#<HomeController>)> params[:search][:sources].nil?
=> false
[3] pry(#<HomeController>)> params["search"]["sources"].empty?
=> false
[4] pry(#<HomeController>)> params["search"]["sources"].eql? ""
=> false
[10] pry(#<HomeController>)> params[:search][:sources].blank?
=> false
[11] pry(#<HomeController>)> params[:search][:sources].any?
=> true

每当 my 的某个属性的params值为空或等于 时"",我就想做一些特定的事情。

我希望它成为if语句的条件,因此在上述情况下它必须返回 true。

params这是我正在检查的实际完整内容:

 params
=> <ActionController::Parameters {"search"=><ActionController::Parameters {"keywords"=>"", "types"=>[""], "categories"=>["", "", "", "", "", "", "", "Hockey", "", "", "", "", "", "", "", "", "", "", "", "", ""], "date_from"=>"", "date_to"=>"", "sources"=>[""], "genders"=>[""], "ages"=>[""]} permitted: false>, "controller"=>"home", "action"=>"index"} permitted: false>

基本上我想检查是否有任何值params[:search][:categories]不为空。在上面的例子中,我们看到其中一个值等于 string Hockey,所以在这种情况下它应该返回 false。

标签: ruby-on-railsrubyruby-on-rails-6

解决方案


我可能会尽量避免检查两者——一个空白数组或一个只包含一个空字符串的数组。但是,如果我必须这样做,我会明确表示:

array = params[:search][:sources]
array.blank? || array == ['']

另一种选择可能是:

params[:search][:sources].first.blank?

但我认为第二种选择更难理解(至少在所有会返回的情况下true)。

因为categories条件是:

params[:search][:categories].any?(&:present?)

推荐阅读