在Ruby哈希中查找特定值



我正在尝试访问以下哈希中的"click_me_123",但我无法解决。我尝试过使用['actions']['text']['value'][:actions][:text][:value],但我检索到了适当的值。渴望理解我做错了什么。

{ "type"=>"block_actions", 
"user"=>{
"id"=>"xxx", 
"username"=>"xxx", 
"name"=>"xxx", 
"team_id"=>"xxx"
}, 
"api_app_id"=>"xxx", 
"token"=>"tYfwns5zvg0g84d58OFVsWrM", 
"container"=>{
"type"=>"message", 
"message_ts"=>"1643747737.666859", 
"channel_id"=>"xxx", 
"is_ephemeral"=>false, 
"thread_ts"=>"1643747737.666859"
},
"trigger_id" => "3043308548484.1420295660643.1e4a0578e0824d3b69ed371a15842fac", 
"team"=>{
"id"=>"T01CC8PKEJX", 
"domain"=>"xxx"
}, 
"enterprise"=>nil, 
"is_enterprise_install"=>false, 
"channel"=>{
"id"=>"C0316CSCANP", 
"name"=>"background-checksdaebc"
}, 
"message"=>{
"bot_id"=>"B02V6G04XMH", 
"type"=>"message", 
"text"=>"New check has been started for asd", 
"user"=>"U03054J13L1", 
"ts"=>"1643747737.666859", 
"team"=>"T01CC8PKEJX", 
"blocks"=>[
{
"type"=>"section", 
"block_id"=>"l2QDl", 
"text"=>{
"type"=>"mrkdwn", 
"text"=>"New check has been started for asd", 
"verbatim"=>false
}
}, 
{
"type"=>"section", 
"block_id"=>"ma=", 
"fields"=>[
{
"type"=>"mrkdwn", 
"text"=>"*Name:*nasd asda", 
"verbatim"=>false
}, 
{
"type"=>"mrkdwn", 
"text"=>"*Email:*n<mailto:asd@asdsd.dk|asd@asdsd.dk>", 
"verbatim"=>false
}, 
{
"type"=>"mrkdwn", 
"text"=>"*Check started:*n2022-02-01T20:35:37+00:00", 
"verbatim"=>false
}, 
{
"type"=>"mrkdwn", 
"text"=>"*Started by:*n<@U01CJ7BTT28>", 
"verbatim"=>false
}
]
}, 
{
"type"=>"actions", 
"block_id"=>"6Xy", 
"elements"=>[
{
"type"=>"button", 
"action_id"=>"mjLb", 
"text"=>{
"type"=>"plain_text", 
"text"=>"Approve", 
"emoji"=>true
}, 
"style"=>"primary", 
"value"=>"click_me_123"
}, 
{
"type"=>"button", 
"action_id"=>"EaN2", 
"text"=>{
"type"=>"plain_text", 
"text"=>"Deny", 
"emoji"=>true
}, 
"style"=>"danger", 
"value"=>"click_me_123"
}
]
}
], 
"thread_ts"=>"1643747737.666859", 
"reply_count"=>1, 
"reply_users_count"=>1, 
"latest_reply"=>"1643749497.845429", 
"reply_users"=>["U03054J13L1"], 
"is_locked"=>false, 
"subscribed"=>true, 
"last_read"=>"1643749497.845429"
}, 
"state"=>{"values"=>{}}, 
"response_url"=>"https://hooks.slack.com/actions/xx/xx/xx", 
"actions"=>[
{
"action_id"=>"mjLb", 
"block_id"=>"6Xy", 
"text"=>{
"type"=>"plain_text", 
"text"=>"Approve", 
"emoji"=>true
}, 
"value"=>"click_me_123", 
"style"=>"primary", 
"type"=>"button", 
"action_ts"=>"1643751685.126753"
}
]
}

actions是一个数组,因此您需要访问特定索引或循环访问它。

例如,如果您的散列名为hsh:

hsh.dig('actions', 0, 'value')

这是编写hsh['actions'][0]['value']的另一种方法,但如果任何元素为零,则会正常失败。

或者。。。

hsh['actions'].map { |action| action['value'] }

返回['click_me_123']

最新更新