Rails访问亲子关系中同胞兄弟姐妹的最佳方法

时间:2019-07-19 06:03:34

标签: ruby-on-rails activerecord

我有以下模型:

class Folder < ApplicationRecord
  has_many :files, -> { reorder_descending }, dependent: :destroy
  has_many :not_deleted_files, -> { not_deleted.reorder_descending }, class_name: 'File'
end


class File < ApplicationRecord
  belongs_to :folder

  scope :not_deleted, -> { where('deleted_at IS NULL ') }

  scope :reorder_ascending, -> { reorder('enactment_date ASC, finding_date ASC, id ASC') }
  scope :reorder_descending, -> { reorder('enactment_date DESC, finding_date DESC, id DESC') }

  def not_deleted_files
    folder.not_deleted_files
  end
end

现在我有一个文件夹,并且遍历所有文件。 在File类中,我有很多使用not_deleted_files方法的方法。每次使用此方法时,都会触发一个新查询。即使它们都具有相同的父文件夹(文件夹)。

查询也要缓存,我认为应该有一种方法可以完全阻止查询。

1 个答案:

答案 0 :(得分:1)

您可以使用inverse_of,因为Rails可以优化对象的加载,因此parent_objectchild_object.parent将引用内存中的同一对象,而不是加载同一记录的另一个副本。

我很高兴它有所帮助。 :)