急切加载并仅列出每个用户的特定博客

时间:2015-10-29 16:11:21

标签: ruby-on-rails ruby

User has_many blogsBlog belongs_to a user。我想将Blogs分组为User,以便我可以在视图中显示/分解每个用户的博客。

事情就是这样:我不想为所有blogs抓取users全部。我想抓住所有users,但我只想抓住几个blogs

如果我确实想要抓住所有博客,我可以在控制器中执行此操作:

    @users = User.includes(:blogs).all #eager loads, grabs ALL of the associated blogs

然后在视图中:通过user显示它们:

<% @users.each do |user| %>
  <h3><%= user.name + " (#{user.blogs.size} blogs)" %></h3>
  <% if user.blogs.any? %>
    <table>
      <thead>
        <th>Blog Title</th>
        <th>Created At</th>
      </thead>
      <tbody>
      <% user.blogs.each do |blog| %>
        <tr>
          <td> <%= link_to(blog, blog)%></td>
          <td> <%= blog.created_at.strftime("%m-%d-%Y")%></td>
        </tr>
      <% end %>
    </tbody>
  </table>
<% end %>
  

但是,我不想急切地加载/抓取/显示相关blogsusers全部。我只想抓住ids = [1,2,3,4,5,6]

的博客

假设我有一个我想要抓取的博客ID数组:

blog_ids = [1,2,3,4,5,6]

根据Eager LoadingArray conditions的导轨指南,我认为我可以这样做:

@all_users_and_only_desired_associated_blogs = User.includes(:blogs).where("blogs.id IN ?", blog_ids).references(:blogs)

基本上:我想假装只有blogs存在这些ID:因此,每当我为特定用户调用blogs时,就会急切地加载它们并忽略任何其他user.blogs。我认为我接近该查询,但它错了。

下一步是确保当我致电user.blogs时,它没有抓住所有users'关联的blogs,而只抓住那些之前急切加载的<% @all_users_and_only_desired_associated_blogs.each do |user| %> <p> <%= user.name %> </p> <% user.blogs.each do |blog| %> #only the associated, eager loaded blogs, not ALL of the associated blogs <p>&nbsp;&nbsp;<%= blog.title%><p> <% end %> <% end %>

Ex in view:


brew install ghostscript

1 个答案:

答案 0 :(得分:0)

感谢Pavan在评论中的建议,这对我有用:

User.includes(:blogs).where("blogs.id IN (?)", blog_ids).references(:blogs)