【问题标题】:rails scope returning one record轨道范围返回一条记录
【发布时间】:2011-09-20 00:43:50
【问题描述】:

我有一个 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 ,因为如果记录集为空,这可能会产生错误。

有什么建议吗?

【问题讨论】:

    标签: ruby-on-rails scope


    【解决方案1】:

    使用find_or_create_by_warehouse_id_and_product_idfind_or_initialize_by_warehouse_id_and_product_id。请参阅 this 了解更多信息。

    【讨论】:

    • 编辑它是因为我意识到 find_or_initialize 会更适合您的需求。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多