我想基于关联对象的属性将:order
过滤器应用于db查询。
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")
它不起作用。它只是按特定顺序返回关键字集合。
答案 0 :(得分: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非常相似,我不知道如何不进行搜索。