代码之家  ›  专栏  ›  技术社区  ›  Cannon Moyer

相当于.where而不在保存前查询-Rails

  •  1
  • Cannon Moyer  · 技术社区  · 7 年前

    我有一个 Invoice 模型 accepts_nested_attributes_for :line_items 具有 allow_destroy: true . 在我的模型中 before_save 回调,我可以引用如下数据:

    self.line_items
    

    self.line_items.where(_destroy: false)
    

    但是,这显然不起作用,因为我正在处理一个未保存的对象。所以,我的问题是如何获得不会被删除的项目列表?我知道我可以在技术上遍历列表,并将每个适用的项添加到一个新的数组中,但我认为还有更直观的东西。例如,目前我使用 .sort_by(&:line_number) 而不是SQL .sort(:line_number) 用于排序,它允许我在内存中排序,而不是从SQL中排序。我需要同样的东西,除了一个 .where

    提前谢谢。

    1 回复  |  直到 7 年前
        1
  •  3
  •   Max    7 年前

    据我所知, where 它专门用于构建SQL查询,因此您不能使用它来处理内存中的条件,例如保存时是否会销毁某些内容。为此,您可以使用 Enumerable 模块,该模块包含在集合对象中。这个 sort_by line_items.reject(&:marked_for_destruction?) . 见 documentation for marked_for_destruction? 更多细节。