我从Webhook请求中得到了哈希值:
webhook = {"environment"=>"master",
"entity_type"=>"item",
"event_type"=>"publish",
"entity"=>
{"id"=>"5267370",
"type"=>"item",
"attributes"=>{"title"=>"new text webhook", "is_separate_activity"=>false, "short_description"=>"webhook", "long_description"=>"new text webhook", "text"=>["5267545"], "author"=>"test", "reading_time"=>"4 min", "updated_at"=>"2020-07-06T13:25:30.599+01:00", "created_at"=>"2020-07-06T12:41:45.495+01:00"},
"relationships"=>{"item_type"=>{"data"=>{"id"=>"245189", "type"=>"item_type"}}, "creator"=>{"data"=>{"id"=>"7243", "type"=>"user"}}},
"meta"=>{"created_at"=>"2020-07-06T12:41:45.495+01:00", "updated_at"=>"2020-07-06T13:25:30.599+01:00", "published_at"=>"2020-07-06T13:25:30.599+01:00", "publication_scheduled_at"=>nil, "first_published_at"=>"2020-07-06T12:41:45.511+01:00", "is_valid"=>true, "status"=>"published", "current_version"=>"9718212"}}}
我只需要存储来自该哈希的基本信息:
webhook.dig('entity', 'id')
,
webhook.dig('entity', 'attributes', 'separate_activity')
,
webhook.dig('entity', 'attributes', 'title')
,
webhook.dig('entity', 'attributes', 'short_description')
,并将其另存为t.json "content_basic"
到Session模型。是否有任何巧妙的方法(也许是一行?)来将几个键/值对抢到另一个哈希?
答案 0 :(得分:0)
不确定是否需要以下内容:
entity = webhook.dig('entity')
data = {
id: entity['id'],
is_separate_activity: entity.dig('attributes', 'is_separate_activity'),
title: entity.dig('attributes', 'title'),
short_description: entity.dig('attributes', 'short_description'),
}
Session.create(content_basic: data.to_json)
您可能会对此进行重构,但不确定真正要保存的内容。
keys = [ 'short_description', 'is_separate_activity', 'title' ]
values = webhook.dig('entity', 'attributes').values_at('short_description', 'is_separate_activity', 'title')
data = { id: webhook.dig('entity', 'id') }
keys.each_with_index{|k, i| data[k] = values[i]}
答案 1 :(得分:-1)
e = webhook['entity']
ea = e['attributes']
[e['id'], ea['separate_activity'], ea['title'], ea['short_description']]
#=> ["5267370", nil, "new text webhook", "webhook"]
我建议不要在知道哈希结构并且嵌套键都应存在的情况下使用dig
,原因很简单:在哈希没有应包含的键时,最好引发异常比dig
安静地返回nil
的情况。当然,如果dig
返回nil
,人们可能会进行调查(以代码形式),但是仅仅引发一个异常那么简单又有什么意义呢?
如果h
是哈希,并且
h[:a][:b][:c] #=> nil
我们知道,因为没有引发异常,所以f = h[:a]
g = f[:b]
是哈希值,但是g
的键值为:c
或{ {1}}没有密钥nil
(例如,与上面的g
一样)。因此,在这种情况下,如果已知:c
的键ea['separate_activity']
具有非null值,则应该引发异常。相对于使用g
,
:c
仅告诉我们在挖掘过程中遇到问题。