Rails:同时将多个记录保存到数据库

时间:2017-08-09 11:11:21

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

我正在创建一个应用,卖家(用户)每次销售商品时都会保存一条记录。此信息存储在名为items的表中。此表包含useritems_soldday

我现在想做的是:

  1. 获取特定日期的所有记录
  2. 按用户分组这些记录
  3. 总和items_sold
  4. 为包含reports的其他表user中的每个用户创建一条新记录,items_soldday
  5. 的总和

    更清楚地说明:

    我想要离开......

    enter image description here

    为...

    enter image description here

    到目前为止我所拥有的是:

    @consolidated_items = Item.all.group(:user).sum(:items_sold)
    

    这给了我:

    {"dave"=>9, "steve"=>20}
    

    但是,我现在不知道该怎么做。到目前为止我的解决方案day丢失了。此外,我现在还不知道如何将这些数据保存到reports表格中(我希望类似于按钮说"创建报告" - 一旦用户推送它,报告中的记录将会被创造。)

1 个答案:

答案 0 :(得分:0)

您的解决方案中不存在day,因为您没有按此字段进行分组(您使用user进行分组,因此user成为您密钥的一部分)而您不是对其执行任何批处理操作(您使用items_sold执行此操作,因为他们sum

您似乎希望将items_sold的数量加到userday,因此您必须使用.group([:user, :day])

如果您不想按day分组,则没有确定的方法来检索日期,因为同一个用户可能有多个。

正确检索数据后,您需要构建一个持久化相关报告,即:

Report.create { user: the_user_from_db, 
                items_sold: the_count_from_db, 
                day: the_day_from_db }

此外,我建议将user_id存储在reports表中,而不是用户名本身。

Activerecord不支持批量记录插入,但您可以使用BulkInsert之类的宝石来实现此功能