2011-07-31 32 views
0

目前,我有以下几点:ActiveRecord包含,如何在嵌套记录中使用?

@threads = current_user.threads.includes(:user, :thread_members) 

然后我去线程并执行以下操作:

@threads.each do |thread| 

    thread_members = thread.thread_members_active(current_user) 

     @threadList << { 
     :id => thread.id, 
     :uuid => thread.uuid, 
     :user_id => thread.user.id, 
     :last_activity_at => thread.last_activity_at, 
     :user_count => thread_members.length, 
     :user_photos => thread_members.collect { |thread_member| 
      { 
      :id => thread_member.user.id, 
      :photo => thread_member.user.photo(:thumb), 
      :name => thread_member.user.full_name 
      } 
     }, 
     :caption => thread.caption 
     } 

end 

这里的问题是,每一个每一个循环,Rails是打到DB的相同的基本记录。我看到日志中的CACHE,但Rails看起来是缓存的,但它很乱。让我希望我可以做一些类型的包括,所以没有那么多的数据库请求。

关于如何优化的任何想法?包括所有用户在一个数据库中的东西碰到什么?

感谢

+0

什么是对thread_members_active的代码? –

+0

@Cypher它是一个方法,执行以下操作:return self.thread_members.joins(:user).where(“users.guest = false or users.guest = true AND users.fname IS NOT NULL or users.id =#{ current_user.id}“) – AnApprentice

回答

1

如果你不想在回路中的任何DB查询,你必须定义的二手那里所包含的命名关联的一切,所以不是一个thread_members_active方法你定义一个thread_members_active关联具有相同的行为。请注意,该关联还需要使用user上的includes。现在不能给你更多的东西,但也许会有所帮助。

编辑:检查出这个文档的一部分“的协会预先加载”:

http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html

相关问题