1

我有点卡住了。

我想退回我的帖子和我的 follow_users 帖子。

我有一个名为“followed_users”的关联,所以我可以调用@user.followed_users

<% for friends in current_user.followed_users  %>
 <% for post in friends.posts %>
  <%= post.body %>
 <% end %>
<% end %>

这有效,但仅适用于“followed_users”帖子。我也想包括我的帖子。所以我的计划是首先检查我的帖子,然后遍历所有帖子,看看哪些属于我的followed_users。

我的实现是返回我的帖子,但不是所有的 follow_users。

我在正确的轨道上吗?

<% for post in Post.all %>
 <% if post.user_id == current_user.id ||
   for friends in current_user.followed_users
    for post in friends.posts
    end
  end %>
   <li>
    <%= post.user.name %>
    <%= post.body %>
   </li>
 <% end %>
<% end %>         
4

1 回答 1

1

不要,真的不要这样做,你不能循环你的所有对象。

做这个:

#in a partial, say _post_details.html.erb
<li>
  <%= post.user.name %>
  <%= post.body %>
</li>

在您的主视图中:

<% current_user.followed_users.each do |friend|  %>
   <%= render partial: "post_details", collection: friend.posts, as: :post %>
<% end %>

<%= render partial: "post_details", collection: current_user.posts, as: :post %>

顺便说一句,当心很可能的N+1查询(关注者-> 帖子)。


在您发表评论后,我建议您这样做:

ids = current_user.followed_users.map(&:id) + [ current_user.id ] 
@posts = Post.where(user_id: ids)

那么在你看来:

<%= render partial: "post_details", collection: @posts, as: :post %>
于 2013-10-01T18:31:10.643 回答