rails scope返回一条记录

时间:2011-09-20 00:43:51

标签: ruby-on-rails scope

我有一个Product对象,它有许多InventoryCurrent对象。每月一次,所有库存交易将汇总,并为每个仓库中的每个产品创建一个新的InventoryCurrent记录。这样做是为了使系统在每次请求当前库存时不必进行数百次计算。 我创建了一个from_warehouse范围如下:

scope :from_warehouse, lambda {|warehouse| where(:warehouse_id =>warehouse) }

我想拨打电话获取当前的广告资源,如下所示:

product.current_inventories.from_warehouse(2).recent

这应该返回最新的InventoryCurrent,或者如果还没有创建一个(因为刚刚添加了产品),那么它应该返回一个新的InventoryCurrent对象,并设置正确的warehouse_id和product_id。

问题是作用域返回记录集,而不是单个对象。我无法将此范围放在方法中并调用.first,因为如果记录集为空,则可能会生成错误。

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

使用find_or_create_by_warehouse_id_and_product_idfind_or_initialize_by_warehouse_id_and_product_id。有关详细信息,请参阅 this