我有一个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
子句外,我还需要其他东西。
先谢谢了。
答案 0 :(得分:3)
据我所知,where
专门用于构建SQL查询,因此您不能使用它来处理内存中的条件,例如是否在保存时会破坏某些内容。为此,您可以使用Enumerable
模块中的方法,该模块包含在集合对象中。您提到的sort_by
调用正在使用该模块。在这种情况下,您可能会使用line_items.reject(&:marked_for_destruction?)
。有关更多详细信息,请参见documentation for marked_for_destruction?
。