我有两个使用Post
关联的模型Tag
和has_and_belongs_to_many
。我有一个动作来加载特定标签的帖子,我想热切地加载每个帖子的其他标签。
我尝试使用
has_and_belongs_to_many :posts, -> { includes :tags }
在Tag
模型上,并尝试使用
@posts = @tag.posts.where(approved: true).includes(:tags)
在控制器操作中,但在两种情况下,渲染时都会运行N + 1个查询
post.tags.pluck(:name).join(', ')
在视图中。
有什么我做错了,或者在引用同一张桌子时我无法使用急切加载?
答案 0 :(得分:2)
从控制台中的快速播放,似乎pluck
是自己的数据库调用。您应该以其他方式从加载的标签中获取名称,例如使用map
:
post.tags.map{ |tag| tag.name }.join(', ')