Как отмечает Юрий в комментариях, вы неправильно определили свои отношения.
Объявления должны have_one :rate
В качестве именованной области при объявлении:
class Announcement < ActiveRecord::Base
has_one :rate
named_scope :order_by_rate, :include => :rate, :order => 'rates.average DESC'
end
Announcement.order_by_rate.paginate :per_page => 10, :page => params[:page]
Обратите внимание на разницу между :include
и :joins
в качестве параметра поиска.: объединения объединяют фрагмент (ы) ассоциации или фрагмент SQL JOIN, заданный для сложных предложений WHERE / ORDER.: include будет работать только с ассоциациями, он обеспечивает те же преимущества, что и: объединения, а также позволяет загружать ассоциации.
Если стремление к загрузке имеет значение:
С помощью include, @ a.rate заполняется тем же оператором SQL, который заполняет @ a.
@a = Association.first :include => :rate
Без include @a.rate не заполняется, пока не потребуется.
@a = Association.first
@a.rate #=> @a.rate is populated here, with a separate SQL statement.