ruby-on-rails - 如何检查“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。
解决方案
我可能会尽量避免检查两者——一个空白数组或一个只包含一个空字符串的数组。但是,如果我必须这样做,我会明确表示:
array = params[:search][:sources]
array.blank? || array == ['']
另一种选择可能是:
params[:search][:sources].first.blank?
但我认为第二种选择更难理解(至少在所有会返回的情况下true
)。
因为categories
条件是:
params[:search][:categories].any?(&:present?)
推荐阅读
- google-apps-script - 如何将未经评估的文本数据写入谷歌表格单元格
- fmod - FMOD 获取参数 OK,设置参数 ERR_INVALID_PARAM
- node.js - 如何将连续的动态音频文件从 NodeJS 流式传输到 HTML5 音频标签 - 作为一个流
- operating-system - fat中的datablock是什么意思
- python - 将每个数据从多个 numpy 传递给函数
- javascript - 如何使用动态单选按钮添加事件以显示文本框
- c++ - 编译器如何生成正确版本的模板函数,其参数在运行时知道?
- php - PHP 基于其他两个数组的数据创建数组的最佳方法
- c# - 将每个异步结果存储在其自己的数组元素中
- amazon-web-services - 使用 AWS Lambda fn 订阅一个 Amazon SNS 主题,即 sns.subscribe()?