我有点卡住了。
我想要回复我的帖子和我的follow_users帖子。
我有一个名为“followed_users”的关联,所以我可以调用@ user.followed_users
<% for friends in current_user.followed_users %>
<% for post in friends.posts %>
<%= post.body %>
<% end %>
<% end %>
这适用于“follow_users”帖子。我也想包括我的帖子。所以我的计划是首先检查我的帖子然后循环查看哪个属于我的follow_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 %>
答案 0 :(得分: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
查询(关注者 - &gt;帖子)。
发表评论后,我建议您这样做:
ids = current_user.followed_users.map(&:id) + [ current_user.id ]
@posts = Post.where(user_id: ids)
然后在你看来:
<%= render partial: "post_details", collection: @posts, as: :post %>