User
has_many blogs
和Blog
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 %>
但是,我不想急切地加载/抓取/显示相关blogs
每users
的全部。我只想抓住ids = [1,2,3,4,5,6]
假设我有一个我想要抓取的博客ID数组:
blog_ids = [1,2,3,4,5,6]
根据Eager Loading和Array 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> <%= blog.title%><p>
<% end %>
<% end %>
。
Ex in view:
brew install ghostscript
答案 0 :(得分:0)
感谢Pavan在评论中的建议,这对我有用:
User.includes(:blogs).where("blogs.id IN (?)", blog_ids).references(:blogs)