PostgreSQL Rails has_many: through / collection_singular_ids /: проблема заказа - PullRequest
2 голосов
/ 30 августа 2011

В процессе перехода на heroku у меня возникает странная ошибка только при использовании PostgreSQL (отлично работает в Mysql)

Когда я выполняю @user.county_ids, я получаю следующую ошибку:

ActiveRecord::StatementInvalid: PGError: ERROR: for SELECT DISTINCT, ORDER BY expressions must appear in select list

LINE 1: ...id" WHERE ("activity_areas".user_id = 1) ORDER BY counties.n...

Сгенерированный sql запрос:

SELECT DISTINCT "activity_areas".county_id FROM "activity_areas" INNER JOIN "counties" ON "counties"."id" = "activity_areas"."county_id" WHERE ("activity_areas".user_id = 1) ORDER BY counties.name ASC

и, наконец, модели:

class User < ActiveRecord::Base
  has_many :activity_areas
  has_many :counties, :through => :activity_areas
end

class ActivityArea < ActiveRecord::Base
  belongs_to :user
  belongs_to :county

  default_scope joins(:county).order("counties.name ASC")
end

class County < ActiveRecord::Base
  has_many :activity_areas
  has_many :users, :through => :activity_areas

  default_scope :order => 'name ASC'
end

Есть идеи, как это исправить? Спасибо,

1 Ответ

1 голос
/ 30 августа 2011

Когда дело доходит до PostgreSQL, убедитесь, что элементы order by также присутствуют в предложении select.MySQL в некотором смысле снисходительно относится к этому правилу:)

Попробуйте изменить область по умолчанию в модели области деятельности на

default_scope select('counties.name').joins(:county).order("counties.name ASC")

. Это должно сгенерировать SQL наподобие

SELECT DISTINCT "activity_areas".county_id, counties.name FROM "activity_areas"...
...