Ruby on rails rails 3中的控制器中的即时加载

Ruby on rails rails 3中的控制器中的即时加载,ruby-on-rails,ruby,ruby-on-rails-3,Ruby On Rails,Ruby,Ruby On Rails 3,在我的应用程序中,posts有很多标签 这些标记通过一个连接表连接,即join_标记 在列出所有帖子的索引视图中,我会这样做: <% post.tags.each do |tag| %> <%= tag.name %>, <% end %> , 这里的问题是,它为每个帖子点击数据库来加载标签 有没有办法在控制器中加载这些

在我的应用程序中,posts有很多标签

这些标记通过一个连接表连接,即join_标记

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

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

,                                
这里的问题是,它为每个帖子点击数据库来加载标签


有没有办法在控制器中加载这些任务的所有标记?也许通过@Posts var?我感觉它是通过急切的加载实现的?

是的,你可以,正如你所说,这是实现这一目标的正确方法,你可能希望在控制器操作中执行以下操作:

def index
  @posts = Post.includes(:tags).all
end
假设您的post模型中存在以下关系:

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

它将为您节省n+1 post标记查询。

是的,您可以,正如您所说,这是实现这一目标的正确方法,您可能希望在控制器操作中执行以下操作:

def index
  @posts = Post.includes(:tags).all
end
假设您的post模型中存在以下关系:

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

它将为您节省n+1 post标记查询。

查看控制器代码会很有帮助,但我认为您正在寻找以下内容:

@posts = Post.all(:include => :tags) 

查看控制器代码会很有帮助,但我认为您正在寻找以下内容:

@posts = Post.all(:include => :tags) 

事实上,对jpemberthy的答案+1,用一个更新的答案击败我。事实上,对jpemberthy的答案+1,用一个更新的答案击败我。