Rails 3.1 различный поиск и пропущенные атрибуты - PullRequest
4 голосов
/ 14 сентября 2011
class State < ActiveRecord::Base
  has_many :cities
end

class City < ActiveRecord::Base
  belongs_to :state
  has_many :companies
end

class Company < ActiveRecord::Base
  belongs_to :city
end

Я пытаюсь перечислить все штаты и их города, в которых есть хотя бы одна зарегистрированная компания.Моей первой попыткой был следующий запрос:

states = State.joins(:cities => :companies).includes(:cities)

, который работает, но я получаю дубликаты, если в штате более одного города с компаниями.Затем я изменил запрос на:

states = State.joins(:cities => :companies).includes(:cities).select("distinct(states.id)")

Этот запрос почти работает.У меня есть доступ к городам (состояния [0]. Города), и нет дубликатов, но если я пытаюсь получить доступ к атрибуту из объекта состояния, я получаю следующую ошибку:я могу решить это?

Заранее спасибо

1 Ответ

2 голосов
/ 14 сентября 2011

Ваш оператор выбора переопределяет значение по умолчанию (SELECT * FROM ... становится SELECT distinct(state.id) FROM...), поэтому результаты не включают столбцы таблицы состояний (откуда выводятся атрибуты). Попробуйте изменить выбранный метод следующим образом:

.select("distinct(states.id), states.*")
...