开发者

ActiveRecord Include, how to use in nested records?

I currently have the following:

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

I then take threads and do the following:

@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

The issue here is that every EACH loop, rails is hitting the DB for the same basic records. Rails sees to be caching as I see CACHE in the log but it's mighty messy. Leaves me wishing I could do some type of includes so there wasn't so many db requests.

Any ideas on how this can be optimized? Something around including all the users in one db hit?

Than开发者_开发问答ks


If you don't want any DB queries in the loop, you have to define everything that's used there in the named associations that are included, so instead of a thread_members_active method you'd define a thread_members_active association which has the same behavior. Note that the association also needs to use includes on user. Can't give you more right now, but maybe that helps a bit.

Edit: Check out the "Eager loading of associations" part of this doc:

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

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜