一尘不染

counter_cache has_many_through通过SQL优化,减少了SQL查询的数量

sql

我如何优化我的SQL查询,以忽略如下情况:

Meeting.find(5).users.size =>从…选择COUNT(*)…

User.find(123).meetings.size =>选择计数(*)从…在哪里…

我不知道如何在这里使用counter_cache。

这是我的模型关系:

class Meeting < ActiveRecord::Base
  has_many :meeting_users
  has_many :users, :through => meeting_users
end

class User < ActiveRecord::Base
  has_many :meeting_users
  has_many :meetings, :through => meeting_users
end

class Meeting_user < ActiveRecord::Base
  belongs_to :meeting
  belongs_to :user
end

最佳的解决方案是什么?

以及如何在此处实现counter_cache?


阅读 136

收藏
2021-03-17

共1个答案

一尘不染

据我所知,您不能counter_cachethrough关联一起使用,这就是为什么您应该手动增加关联的原因。

例如(未测试):

class MeetingUser < ActiveRecord::Base

  ...

  after_create { |record| 
    Meeting.increment_counter(:users_count, record.meeting.id)
  }

  after_destroy { |record| 
    Meeting.decrement_counter(:users_count, record.meeting.id)
  }

end
2021-03-17