1

我有一个帖子网格,用户可以喜欢或不喜欢导致N + 1查询。Rails 4条件呈现导致N + 1查询

我渲染后的集合,其局部的有:

<%= post.title %> 
<% if current_user.liking?(post) %> 
    <%= render partial: 'posts/unlike' %> 
<% else %> 
    <%= render partial: 'posts/like' %> 
<% end %> 
... 

用户控制器:

def show 
    @user = User.find(params[:id]) 
    @feed = @user.posts.paginate(page: params[:page]) 
end 

这是造成每个岗位一个查询。我虽然使用.INCLUDE(:喜欢),但我不知道该怎么做了“CURRENT_USER”

编辑:

我结束了创建为喜欢这就是第二个查询属于CURRENT_USER

@liking_items = @feed.includes(:likes).where(likes: { user_id: current_user }) 

回答

1

既然你有current_user,你可以再补充一个,其中:

@user.post.includes(:likes).where(likes: { user_id: current_user })

(我假设“像所有者”是user_id)。

+0

@user是发布者,current_user是可以喜欢或不同于帖子的登录用户。你怎么能通过我的观点? –

+0

你只需要过滤这些帖子,然后将它传递给视图,就像你在做什么。 – dpedoneze

+0

我想你的查询是错误的,因为它获得具有user_id的邮件:current_user,这不是用例。我需要喜欢有user_id:current_user –