型号:
class BacklinkReport
has_many :backlinks, :dependent => :destroy
has_many :domains, through: :backlinks
has_many :pages, through: :backlinks
has_many :domain_scores, through: :domains
has_many :page_scores, through: :pages
end
class Backlink
belongs_to :domain
has_many :domain_scores, through: :domains
end
class Domain
has_many :pages
has_many :domain_scores
end
class DomainScores
belongs_to :domain
end
通过ActiveRecord,我需要一个给定backlink_report的唯一域列表,按其MAX(domain_score.date)排序,最终按其domain_score.pa得分排序。
修改
我目前正在将查询分为两部分。第一个通过ID加入所有域和组上的特定报告的反向链接,以接收此特定报告的唯一域列表。然后,我按照每个域的最新DomainScore映射列表,并按domain_score.da排序。第二个查询需要相当长的时间,因为它在与报告关联的15k左右域中的每个域上运行DomainScore查找。通过上述协会,有没有更有效的方法来实现我的结果?我还希望能够限制我要求的最高排名域数与获取整个网站的数量。
domains = Domain.joins(:backlinks).where(:backlinks => {:backlink_report_id => report_id}).group('domains.id')
domains = domains.map{|d| d.domain_scores.sort_by{|x| x['date']}.last}.compact.sort_by(&:da).reverse!