2016-04-28 46 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一樣簡單。