Ruby on rails Rails 4:after_查找并包含冲突

Ruby on rails Rails 4:after_查找并包含冲突,ruby-on-rails,activerecord,include,Ruby On Rails,Activerecord,Include,在我的订单模型中,我有许多关联: has_many :suborders, dependent: :destroy, inverse_of: :order 但是,在查找记录后,我必须进行一些预处理,因此我还有一个after\u find回调,如: after_find :verify_validity def verify_validity order.suborders.each do |suborder| ... doing something here with sub

在我的
订单
模型中,我有许多关联:

has_many :suborders, dependent: :destroy, inverse_of: :order
但是,在查找记录后,我必须进行一些预处理,因此我还有一个
after\u find
回调,如:

after_find :verify_validity
def verify_validity
   order.suborders.each do |suborder|
      ... doing something here with suborders ...
   end
end
但是,当我尝试加载一批订单及其子订单时,我会得到重复的订单:

在控制器中:

@orders = Order.active.order(:updated_at => :desc).includes(:suborders)
鉴于:

Order is <%= order.inspect %>
<br />
Order suborders are <%= order.suborders.inspect %>
顺序是

订单子订单为
我得到

Order is #<Order id: 1126, ...>
Order suborders are #<ActiveRecord::Associations::CollectionProxy [#<Suborder id: 119, order_id: 1126...>, #<Suborder id: 119, order_id: 1126...>]>
顺序是#
订单子订单为#
如何避免获得这样的副本

编辑:我还注意到系统正在两次执行相同的查询(第一次是在_find之后的
中,然后再次是因为
包含了
)。如何使查找后的
使用
包含的结果
?查找后
中的一个查询效率很低(n+1个查询)。

这应该可以:

order.suborder.uniq.inspect


这可能会给您一些其他想法。

您为什么要在
订单中验证
模型?为什么不将“…在这里处理子订单…”添加到
子订单
模型中?@RichPeck这不是验证:它是基于其子订单的订单模型的更新。我需要在每次加载时都这样做。谢谢。这确实有效。但是,这并不能解决执行的查询数量问题。