【问题标题】:Rails 4 conditional render cause N+1 queryRails 4 条件渲染导致 N+1 查询
【发布时间】:2016-09-13 00:14:39
【问题描述】:

我有一个帖子网格,用户可以喜欢或不喜欢引起 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 })

【问题讨论】:

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


    【解决方案1】:

    既然你有current_user,你可以添加一个where:

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

    (我假设“喜欢的所有者”是user_id)。

    【讨论】:

    • @user 是发帖者,current_user 是可以喜欢或不喜欢帖子的登录用户。你怎么能把它传递给我的观点?
    • 您只需过滤帖子,然后将其传递给视图,就像您正在做的那样。
    • 我猜你的查询是错误的,因为它得到的帖子有 user_id: current_user 而这不是用例。我需要具有 user_id: current_user 的 Likes
    猜你喜欢
    • 2021-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-22
    • 2019-11-21
    • 1970-01-01
    • 2021-09-22
    • 1970-01-01
    相关资源
    最近更新 更多