rails active-record:检索并组合来自两个不同表/源的类似数据

时间:2014-06-13 13:02:55

标签: ruby-on-rails activerecord ruby-on-rails-4

在我的新rails(4.1)应用程序中,我有两个数据模型:

  1. 每日汇总数据(例如,字段"销售","日期",...),这些数据一直持续到昨天
  2. "活"来自API的数据,每分钟获取一次,内容相同但名称不同(例如,字段"收入","时间戳",...)
  3. 在一个视图中,我想显示今天的每日数据(1)+当前(最后)值,这是实时流(2)中的最后一个值 - 然后每当用户重新加载时都会更新。

    问题是,两个表中的命名是完全不同的,并且一些数据字段也有所不同,所以

    data = daily_data + current_data.last
    

    不起作用。我的想法如下:

    1. 仅采用相关列:

      daily_data.select("sales, date")
      live_data.select("revenue, timestamp").last
      
    2. 将时间戳修改为日期

      live_data.timestamp.to_date
      
    3. 匹配"销售"收入"收入"并合并/合并两个(仅适用于视图,不在ActiveRecord中)

    4. 我的想法好吗?我该如何实施呢?我在协会上遗漏了什么吗? (我还冒险进入单表继承,并考虑定义一个父数据模型" company_data",并制作它的daily_data和live_data子模型,但这可能是过度的 - 或者是吗?)

      修改

      手术后,我打算使用

      .group_by_date
      

      使用ChartKick将数据显示为图表。

      编辑结束

      很抱歉,如果这个问题很愚蠢,我还是在轨道上找到新的并且搜索了1.5小时......

      提前谢谢!

1 个答案:

答案 0 :(得分:0)

daily_data.select("sales as revenue, date as datadate")
live_data.select("revenue, timestamp as datadate").last

这种方式在两种情况下属性都是收入和数据。

编辑:

您对group_by的评论是原始问题中没有的其他信息。由于group_by由数据库评估,因此您仍需要向其发送数据库中使用的字段名称。 select解决方案仅更改ActiveRecord对象中的属性。

@data = daily_data.select("sales as revenue, date as datadate").group_by_date(:date)
@data << live_data.select("revenue, timestamp as datadate").last