我正在尝试制定一个复杂的SQL查询(在Rails 3中)来访问属于用户关注者的照片对象。
场景将是:
- 用户 A 有 500 个关注者
- 每个关注者有 500 张照片
- 我想生成一个查询,根据创建日期一次分页(使用 will_paginate)10 张照片,并将其返回给用户 A
因此,这基本上就像将关注者的所有照片收集到一组中,根据照片创建日期对集合进行排序,然后将结果分页为一次仅返回 10 张照片。 这可能意味着最近的 10 张照片来自多个关注者。
我对此有两个问题:
- 您将如何有效地制定这样的复杂查询?(我对 Rails 比较陌生,所以我不太了解自定义查询)。
- 有理由不这样做吗? 例如,如果用户有 1,000 个关注者,每个关注者有 10,000 张照片,则这样做是否存在延迟问题?
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'
其中关注者/关注者只是另一个用户。
感谢您提供的任何指导! 非常感谢!!:)
我怀疑会有延迟问题,因为will_paginate对查询施加了限制,在您的情况下为 10。但是,您需要确保数据库中存在索引。
我认为这样的事情应该有效:
has_many :follower_photos, :class_name => 'Photo', :through => :followers
这就是你要找的吗?