
[英]Sinatra Ruby iterate over an array in a hash to send jQuery Sortable to database
[英]Iterate over database Record
我有这样的数据库记录
[#<Event:0x00007fbe7372de48
@timezone="Europe/London">,
@data={:foo=>"bar", :larry=>"lobster"},
@id="first_event",
@name="page_viewed",
@occurred_at=Thu, 18 Feb 2021 21:16:57 UTC +00:00>,
#<Event:0x00007fbe7372de48
@timezone="Europe/London">,
@data={:foo=>"bar", :larry=>"test2"},
@id="second_event",
@name="page_viewed",
@occurred_at=Thu, 18 Feb 2021 21:17:57 UTC +00:00>,
#<Event:0x00007fbe7372f2e8
@timezone="Europe/London">,
@data={:foo=>"bar", :larry=>"lobster"},
@id="second_event",
@name="rfq_created",
@occurred_at=Thu, 18 Feb 2021 21:19:57 UTC +00:00>
#<Event:0x00007fbe7372f2e8
@timezone="Europe/London">,
@data={:foo=>"bar", :larry=>"lobster"},
@id="second_event",
@name="rfq_created",
@occurred_at=Thu, 18 Feb 2021 22:18:57 UTC +00:00>...]
现在我想在事件名称( purchased
)是page_viewed
、 started
和selected
时获取rfq_created
rfq_created
并purchased
这是我所做的:
EVENTS = { "unique_kpi" => { "page_viewed" => 'UVisit',
"start" => 'PVisit',
"selected" => 'SVisit'
},
"non_unique_kpi"=> {"rfq_created" => 'RfqCreated',
"purchased" => 'Purchased'
}
}
def key_performance_indicators
key_indicators = events.each_with_object({}) do |event, hash|
if EVENTS["non_unique_kpi"].keys.include?(event.name)
hash[event.name] = [] unless hash.has_key?(event.name)
hash[event.name] << event
else
hash[event.name] = event unless hash.has_key?(event.name)
end
key_indicators.map do |key, value|
kpi_class = indicator_class(key)
"{kpi_class}".constantize.new(event: value)
end
end
def indicator_class(kpi_key)
EVENTS.find { |_k, hash| return hash[kpi_key] if hash.keys.include?(kpi_key) }
end
我想以很好的方式重构它有没有其他方法可以做到这一点? 请帮忙。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.