Rails用has_and_belongs_to_many急切加载

时间:2013-11-29 04:49:43

标签: ruby-on-rails activerecord ruby-on-rails-4

我有两个使用Post关联的模型Taghas_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(', ')

在视图中。

有什么我做错了,或者在引用同一张桌子时我无法使用急切加载?

1 个答案:

答案 0 :(得分:2)

从控制台中的快速播放,似乎pluck是自己的数据库调用。您应该以其他方式从加载的标签中获取名称,例如使用map

post.tags.map{ |tag| tag.name }.join(', ')