{ "publishedDate" => { "de"=>"2019-05-02T-6ren">
gpt4 book ai didi

ruby-on-rails - 如何正确检查 ruby​​ 中的嵌套值

转载 作者:行者123 更新时间:2023-12-02 16:35:59 26 4
gpt4 key购买 nike

我有一个看起来像这样的 ruby​​ 散列:

payload = {
"fields" => {
"publishedDate" => {
"de"=>"2019-05-02T00:00+02:00"
}
}
}

所以现在我想访问日期。我将如何有效且正确地编写 if 语句来检查日期是否存在?

我目前正在做这样的事情,但不知何故感觉代码太多了:

payload["fields"] && payload["fields"]["publishedDate"] && payload["fields"]["publishedDate"].first && payload["fields"]["publishedDate"].first.last

谢谢你帮助我!

最佳答案

假设日期始终是值(以 de 为例),那么您可以使用 dig 到达每个 publishedDate ,然后使用 Hash#values 到达每个哈希/值,并使用 any?(&:present?) 检查是否有任何给定值不是 空白:

(payload.dig('fields', 'publishedDate') || {}).values.any?(&:present?)

如果哈希中不存在字段和/或 publishedDate,它将返回 nil,您将使用 {} 调用值,从而产生一个没有 的空数组 present? 值(value)观。

如果哈希来自请求参数,您必须知道 Rails 在对象上调用 with_indifferent_access 并且您的哈希键也可以作为符号访问,因此您可以这样做:

(payload.dig(:fields, :publishedDate) || {}).values.any?(&:present?)

关于ruby-on-rails - 如何正确检查 ruby​​ 中的嵌套值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62733062/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com