繁体   English   中英

遍历数据库记录

[英]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_viewedstartedselected时获取rfq_created rfq_createdpurchased

这是我所做的:

 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM