【发布时间】:2019-11-14 19:12:41
【问题描述】:
是否可以使用预先加载作为 .map() 方法的一部分?
例如,我有以下内容:
tag_images = tags.map(&:images)
在其他地方,这些 tag_image 中的每一个都有其 parent_image 使用image.parent_image 访问。
子弹 gem 建议我使用 .includes(:parent_image),但我不确定如何在这种情况下应用预加载。
以下是模型适用部分的设置方式...
Image.rb
has_many :image_tags
has_many :tags, through: :image_tags
has_many :crops, class_name: "Image", foreign_key: "parent_image_id"
belongs_to :parent_image, class_name: "Image"
标签.rb
has_many :image_tags
has_many :images, through: :image_tags
它正在经历一系列一个或多个标签并“收集”与它们相关的所有图像(因此使用tags.map(&:images))。稍后,每个图像的parent_image 都被image.parent_image 引用。
因此,理想情况下,虽然它正在“收集”tag_images,但有没有一种方法可以在初始 .map 方法(或者可能是其他一些查询更合适)?
有什么想法吗?
【问题讨论】:
-
您确定要使用
map吗? (顺便说一句,这是一种方法,而不是“命令”。)看起来您可能想要使用查询,但您没有显示有关模型的任何信息,所以很难说。 -
当然,对不起@jvillian,我回去在模型信息中添加了。这有帮助吗?
标签: ruby-on-rails eager-loading