Rails为属于用户关注者的对象复杂SQL

时间:2011-05-13 02:09:45

标签: sql ruby-on-rails ruby-on-rails-3 performance

我正在尝试制作一个复杂的SQL查询(在Rails 3中),用于访问属于用户关注者的照片对象。

场景将是:

  • 用户A有500名粉丝
  • 每位粉丝都有500张照片
  • 我想生成一个查询,根据创建日期一次分页(使用will_paginate)10张照片并将其返回给用户A

所以这基本上就像将所有关注者的照片收集到一个集合中,根据照片创建日期对集合进行排序,然后对结果进行分页,一次只返回10张照片。这可能意味着最近的10张照片来自多个粉丝。

我有两个问题:

  1. 您如何有效地制定这样的复杂查询? (我对Rails比较新,所以我不太了解自定义查询。)
  2. 有没有理由不这样做?例如,如果用户有1,000个粉丝,每个都有10,000张照片,那么会出现延迟问题吗?
  3. User.rb文件中的关系建模为:

    has_many :following, :through => :relationships, :source => :followed
    has_many :followers, :through => :reverse_relationships, :source => :follower
    
    has_many :photos,   :dependent => :destroy, :order => 'created_at DESC'
    

    其中关注者/关注者只是另一个用户。

    感谢您提供的任何指导!非常感谢!!! :)

1 个答案:

答案 0 :(得分:1)

我怀疑会出现延迟问题,因为在您的情况下,will_paginate会对查询设置限制。但是,您需要确保数据库中存在索引。

我认为这样的事情应该有效:

has_many :follower_photos, :class_name => 'Photo', :through => :followers

这就是你要找的东西吗?