相当于 .where 在 before_save 中没有查询 - Rails



我有一个Invoice模型,它与allow_destroy: true accepts_nested_attributes_for :line_items。在我的模型中,在before_save回调中,我可以像这样引用数据:

self.line_items

某些项目将在保存时删除。我希望能够只抓取不会像这样删除的项目:

self.line_items.where(_destroy: false)

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

提前谢谢。

我所知,where专门针对构建SQL查询,因此您不能使用它来处理内存中的条件,例如保存时是否会销毁某些内容。为此,您可以使用 Enumerable 模块中的方法,该模块包含在集合对象中。您提到的sort_by调用正在使用该模块。在这种情况下,您可能会使用 line_items.reject(&:marked_for_destruction?) .有关更多详细信息,请参阅marked_for_destruction?文档。

最新更新