ruby-on-rails 从深度嵌套模型中获取最新记录

qij5mzcb  于 2022-12-30  发布在  Ruby
关注(0)|答案(1)|浏览(178)

假设我有3个模型:
型号A具有多个型号B型号B具有多个型号C
我正在查询ModelA,但在ModelC中,我有多个相同类型的,假设我有3个,但我只需要最近的一个。
我试过做这样的事...

records = ModelA.where(some query).includes ModelB includes ModelC

// convert activerecord collection to array
records = records.to_a

records.each do |record|

  record.modelBs.each do |modelB|
    filter the modelCs i don't need

    modelB.modelCs = filteredModelCs

  end

end

return records

但不是仅仅返回记录数组,而是运行UPDATE sql查询并修改数据库记录。这是一个惊喜,因为我从未使用过.保存方法,我以为我已经将集合从活动记录集合转换为数组
如何在不修改数据库记录的情况下过滤深度嵌套的记录?然后返回过滤结果

ws51t4hk

ws51t4hk1#

使用=将示例列表分配给has_many集合将立即将更改持久化到数据库。
相反,我会尝试用更具体的联想来解决这个问题,比如:

class A
  has_many :bs
  has_many(:cs, through: :bs) do
  has_one :recent_c, -> { order(created_at: :desc).limit(1) }, source: :cs

class B
  has_many :cs

有了这些联系,我希望以下做法能够奏效:

as = A.where(some query).includes(:recent_c)

as.each do |a|
  a.recent_c # returns the most recent c for this a
end

相关问题