我的应用程序Product
和Price
Product
描述了产品(name
,description
等),Price
有value
,first_seen_at
(日期时间) )和last_seen_at
(日期时间)。
Product
has_many Prices
。
我们的想法是,当产品价格发生变化时,最新的Price
记录会更新:
value
与现有价格相同,则last_seen_at
会更新value
与现有价格不同,则会使用新的详细信息创建新的Price
记录我希望能够访问产品的最新价格,因此目前使用product.prices.last.value
其中product
是数据库中的任何给定产品
有没有更好的方法来实现这一目标?要向数据库添加价格,我目前正在执行以下操作:
我知道我可以将latest_price存储在Product
记录中,但数据会被复制......
答案 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
大致一样简单。