Rails 4条件渲染导致N + 1查询

时间:2016-05-17 04:05:46

标签: ruby-on-rails performance caching activerecord eager-loading

我有一个帖子网格,用户可以喜欢或不同于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(:likes),但我不知道怎么做'current_user'

修改

我最终为属于current_user

的喜欢创建了第二个查询
@liking_items = @feed.includes(:likes).where(likes: { user_id: current_user })

1 个答案:

答案 0 :(得分:1)

由于您拥有current_user,因此您只需添加一个位置:

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

(我假设&#34;喜欢所有者&#34;是user_id)。