小编mak*_*spb的帖子

Rails has_many:through和N + 1

我有两个关联的模型:聊天和通过会员资格的用户模型

class Chat < ActiveRecord::Base
 has_many :memberships
 has_many :members, through: :memberships
end

class Membership < ActiveRecord::Base
 belongs_to :chat
 belongs_to :member, class_name: "User", foreign_key: 'user_id'
end
Run Code Online (Sandbox Code Playgroud)

在控制器中,我检索类似的记录:

@chats = Chat.joins(:memberships).includes([:owner, :memberships=>:member])
.where("chats.owner_id = ? OR memberships.user_id = ?", current_user.id, current_user.id)
Run Code Online (Sandbox Code Playgroud)

在视图中,我像这样显示与JBuilder的聊天:

json.extract! @chat, :id
   json.members @chat.memberships.order('id ASC') do |membership|
     json.name membership.member.name
   end
end
Run Code Online (Sandbox Code Playgroud)

但是Rails会生成很多数据库查询,并且视图呈现需要很长时间:

Completed 200 OK in 1597ms (Views: 1393.8ms | ActiveRecord: 150.8ms)
Run Code Online (Sandbox Code Playgroud)

如何优化和加快这些查询?

activerecord ruby-on-rails

3
推荐指数
1
解决办法
1176
查看次数

标签 统计

activerecord ×1

ruby-on-rails ×1