分别跟踪新记录和更新记录的计数

时间:2018-10-22 06:59:48

标签: ruby-on-rails ruby activerecord

当前正在从事一个项目,在此项目中,任何管理员都可以将xlsx产品表导入到活动记录中。我已经开发了它,以便xlsx解析器将每个唯一的产品行交给一项工作,该工作要么更新现有产品,要么根据给定的属性创建新产品。

我想跟踪每次导入的图纸更新和创建的产品数量,添加的资产等,以显示在管理面板中。

我现在使用的方法是简单地创建带有关联产品ID的事件,这些事件对有条件的save记录作出响应,然后在导入完成后我将其递增计数并显示。

if product.save
  product.events.new(payload: 'save')
end

此技术的问题在于,我无法区分产品是新产品还是已更新。

是否有更好的技术更适合用来对保存的产品进行计数,同时区分是更新产品还是新产品?

TDLR; 从Excel工作表将产品导入活动记录(每个产品1个工作)。有什么更好的做法/技术可以使每次导入单独记录新记录和更新记录。

2 个答案:

答案 0 :(得分:1)

您在这里有几种选择:

根据我的评论,一个简单的选择就是保存记录后检查created_atupdated_at列。如果它们相等,则它是一条新记录,如果不相等,则意味着该记录已存在并已更新。您将遵循以下原则:

if product.created_at == product.updated_at
   new_product_count += 1
else
  updated_product_count += 1
end

但是,可能会有更好的方法来做到这一点。举例来说:如果我理解正确,那么您将通过创建一个新的“保存”事件来跟踪保存的产品数量。您可以改为使用两种类型的事件:createdupdated。 (这将带来额外的好处,即允许您计算自产品创建以来已被更新的次数)

答案 1 :(得分:0)

我不知道这是否可以为您提供帮助,但是在这种情况下,我使用persisted?方法。

person = Person.new(id: 1, name: 'bob')
person.persisted? # => false