2016-04-28 48 views
0

,我有以下我的应用程序两种型号,ProductPrice更新相关的“最新”的模式

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

A Product has_many Prices

的想法是,当一个产品变化的价格,最新的Price记录被更新:

  • 如果新的价格value是一样的现有价格,last_seen_at更新
  • 如果新的价格value是现有的价格不同,一个新的Price记录用新的细节

我希望能够创造ACCE ss目前使用的产品的最新价格,所以目前使用product.prices.last.value其中product是从数据库中的任何给定产品

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

    1. 查找产品查找最新售价为产品
    2. 检查价格
    3. 要么更新价格差异记录或创建一个新的价格纪录

    我知道我可以存储在Product记录latest_price,但随后的数据将被复制...

  • +0

    '如果值是一样的,'是一样的? –

    +0

    “找到价格时” - 这是某种价格比较应用程序吗?我认为你需要给出一种高层次的描述,说明这应该如何工作。 – max

    +0

    我已经做了一些修改来澄清 - 这个想法是产品的价格将会改变。但我会通过请求将最新价格推到应用程序中。这个请求然后会得到处理...有值更改?等等 – Jack

    回答

    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一样简单。