And*_*pel 2 ruby if-statement ruby-on-rails
我有一个看起来像这样的 ruby 哈希:
payload = {
"fields" => {
"publishedDate" => {
"de"=>"2019-05-02T00:00+02:00"
}
}
}
Run Code Online (Sandbox Code Playgroud)
所以现在我想访问日期。我如何有效且正确地编写 if 语句来检查日期是否存在?
我目前正在做这样的事情,但不知何故感觉它的代码太多:
payload["fields"] && payload["fields"]["publishedDate"] && payload["fields"]["publishedDate"].first && payload["fields"]["publishedDate"].first.last
Run Code Online (Sandbox Code Playgroud)
谢谢你帮我解决!
假设日期始终是值(以 为例de),那么您可以使用dig到达 every publishedDate,然后到达Hash#values每个散列/值并any?(&:present?)检查是否有任何给定值不为空:
(payload.dig('fields', 'publishedDate') || {}).values.any?(&:present?)
Run Code Online (Sandbox Code Playgroud)
在哈希中不存在字段和/或已发布日期的最终情况下,它将返回 nil,并且您将使用 {} 调用值,从而产生一个没有present?值的空数组。
如果哈希来自请求参数,您必须知道 Rails 调用with_indifferent_access对象,并且您的哈希键也可以作为符号访问,因此您可以这样做:
(payload.dig(:fields, :publishedDate) || {}).values.any?(&:present?)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
140 次 |
| 最近记录: |