新手问题 map 可以实现判断,然后处理吗?求助

Catherine · 2015年12月04日 · 最后由 catherine 回复于 2015年12月04日 · 1471 次阅读

需求:

输出一个送货单 excel 前提下,用户在 2 次订单里都添加了同一个商品 A,数量都为 1。在发货单里体现出的就是 2 个 A,数量分别为 1。现在需要在输出的这个 excel 里将两个 A 合并成一个,数量合并为 2,金额也合并。

现在的问题

因为数据表只有一个订单表,没有发货订单表,而且原数据是不能改的。所以只能在输出处理 excel 的时候完成合并的过程。

数据的关系

deliver_list(发货单) has_many deliver_items(发送的货物) deliver_item belongs_to order(订单) order belongs_to item(货物) 每一个货物 (item) 都有个 item_id 的唯一标识。

迭代是从 deliver_list 下的 deliver_items 开始遍历的

deliver_list.deliver_items.each

打印输出都没有什么问题,但现在要合并。我想了下不知道是该在这个 each 里判断,还是额外做一个 map,将 item_id 相同的那个 deliver_item 的数量、金额进行合并。

用 map 话不知道 map 是否能完成这种判断,再处理合并,但同时不能修改原数据..

DeliverList 增加一个 #merged_deliver_items 方法

class DeliverList < ActiveRecord::Base
  def merged_deliver_items
    deliver_items.includes(:order).group_by {|item| item.order.item_id }
  end
end

看情况优化性能

#2 楼 @qhwa 谢谢回复!我可以在 deliver_item 里合并,然后在 deliver_item 里写个方法返回合并后的值,然后在处理 excel 的改改就应该可以了?我一会先试试。

另外,在生成的 excel 表格内可以判断吗?把指定货物信息区域遍历一次再修改。对 excel 操作还不太熟悉,不知道能否直接读取格的值来处理,再重新写入。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号