对于内for循环使用或循环(For loop within for loop with OR)

2019-10-18 16:56发布

我有点卡住了。

我想回到我的职位和我的followed_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。

我实现我回后,但不是所有的followed_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 %>         

Answer 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 %>


文章来源: For loop within for loop with OR