如何检查 "params[:attribute]" 中是否没有值

How to check for the presence of no value in a "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

每当我的 params 的属性值为空或等于 "" 时,我想做一些具体的事情。

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

这是实际完整的 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] 中的值是否不为空。在上面的例子中,我们看到其中一个值等于字符串 Hockey,所以在这种情况下它应该 return false.

我可能会尽量避免检查两者——空数组或仅包含空字符串的数组。但如果必须的话,我会明确表示:

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

另一种选择可能是:

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

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

对于 categories,条件为:

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