3

我想:order根据关联对象的属性将过滤器应用于数据库查询。

class Report < ActiveRecord::Base
  has_many :keywords 
end

class Keyword < ActiveRecord::Base
  has_one :score
  belongs_to :report 
end

class Score < ActiveRecord::Base
  belongs_to :keyword 
end

这是我的查询,用于提取报告的关键字,按关键字的相关得分值属性排序。

@keywords = @report.keywords.all(:joins => :score, :order => "scores.value DESC")

它不工作。它只是以没有特定顺序的方式返回关键字集合。

4

1 回答 1

1

那是因为您的查询正在做两件不同的事情。它根据报告 ID ( @report.keywords) 从一份报告中获取所有关键字。然后,您正在尝试使用关键字和分数进行连接。
想想 SQL,您想要的是将报表连接到其他两个表。

SELECT * FROM reports 
JOIN keywords ON reports.id = keywords.id 
JOIN scores ON keywords.id = scores.id

要将其转换为 Rails,如果您使用的是它的更新版本,您可以执行以下操作:

@report.keywords.includes(:score).order("scores.value DESC")

旧版本的rails很相似,我不知道怎么做。

于 2013-08-21T18:07:58.693 回答