ruby-on-rails - 在 rails 3 中预先加载 Controller

标签 ruby-on-rails ruby ruby-on-rails-3

在我的应用中,帖子有很多标签。

标签通过连接表 join_tags 连接

在我列出所有帖子的索引 View 中,我会这样做:

<% post.tags.each do |tag| %>
    <%= tag.name %>,                                
<% end %>

这里的问题是它会为每个帖子访问数据库以加载标签。

有没有办法在 Controller 中一次加载这些任务的所有标签?也许通过@Posts var?我有一种预加载的感觉?

最佳答案

是的,你可以,正如你所说,eager loading是实现此目的的正确方法,您可能希望在 Controller 操作中执行类似的操作:

def index
  @posts = Post.includes(:tags).all
end

假设您的帖子模型中有以下关系:

has_many :join_tags
has_many :tags, :through => :join_tags

它将为您节省 n+1 次标签后查询。

关于ruby-on-rails - 在 rails 3 中预先加载 Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6118362/

相关文章:

ruby - 如何使用 Capybara & Minitest 测试多步表单?

javascript - Rails - 如何在添加项目时强制刷新页面

javascript - 如何找到特定 tr 中 td 的值

ruby-on-rails - Rspec:如何测试私有(private)方法中引发的异常?

ruby-on-rails - Rails 路由顶层路由和信息架构

ruby-on-rails - 使用 erb 渲染一个变量

ruby-on-rails - 在 Windows 7 上安装 ImageMagick 和 rmagick

ruby-on-rails - Rails Controller /模型方法

ruby-on-rails - rails 5 : Add record to join table without model (has_and_belongs_to_many)

ruby-on-rails - PeopleController 创建操作应在模型有效时重定向