【问题标题】:Update associated 'latest' model更新关联的“最新”模型
【发布时间】:2016-04-28 11:39:25
【问题描述】:

我的应用程序中有以下两个模型,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. 更新价格记录或创建新价格记录

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

【问题讨论】:

  • If value is the same, 和哪个一样?
  • “找到价格时” - 这是某种价格比较应用程序吗?我认为你需要对它应该如何工作给出一种高级别的描述。
  • 我进行了一些编辑以澄清 - 想法是产品的价格会发生变化。但我会通过请求将最新价格推送到应用程序。然后将处理此请求...值是否已更改?等

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


【解决方案1】:

您可以添加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 一样简单。

【讨论】:

    猜你喜欢
    • 2016-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-27
    • 1970-01-01
    相关资源
    最近更新 更多