更新相关的“最新”模型

时间:2016-04-28 11:39:25

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

我的应用程序ProductPrice

中有以下两个模型

Product描述了产品(namedescription等),Pricevaluefirst_seen_at(日期时间) )和last_seen_at(日期时间)。

Product has_many Prices

我们的想法是,当产品价格发生变化时,最新的Price记录会更新:

  • 如果新价格的value与现有价格相同,则last_seen_at会更新
  • 如果新价格的value与现有价格不同,则会使用新的详细信息创建新的Price记录

我希望能够访问产品的最新价格,因此目前使用product.prices.last.value其中product是数据库中的任何给定产品

有没有更好的方法来实现这一目标?要向数据库添加价格,我目前正在执行以下操作:

  1. 在数据库中查找产品
  2. 查找该产品的最新价格
  3. 检查价格差异
  4. 更新价格记录或创建新的价格记录
  5. 我知道我可以将latest_price存储在Product记录中,但数据会被复制......

1 个答案:

答案 0 :(得分:0)

您可以添加has_one来提供对“最后”价格的访问权限,但它只是简单地使用prices.last

class Product < ActiveRecord::Base
  has_many :prices
  has_one :latest_price, -> { order('id desc').limit(1) }, class_name: 'Price'
end

# Your code
product.prices.last.value

# My code
product.latest_price.value

一般来说,我更喜欢prices.last方法。您应该将所有“创建或更新”逻辑移动到模型中,因此访问最后一个值的方式应该无关紧要。它应该与product.prices.last.update_value大致一样简单。