2016-01-29 2 views
1

user.rbфункция группы в belongs_to ассоциации рельсы

enum gender: [:Male, :Female] 
belongs_to :qualification 

qualification.rb

has_many :users 

Когда я запрашиваю

User.all.group(:gender).count.map { |k, v| [User.genders.key(k), v] }.to_h 

Это дает мне

{"Male"=>18, "Female"=>1} 

Но я не знаю, как это сделать для квалификации, потому что ассоциация связана с ней. Как я это делаю?

User.all.group(:qualification_id).count.map { ??? } 

ответ

4

Вы можете выполнить соединение между вашим ассоциируемых моделей с использованием joins() с именем ассоциации, а затем группу любого столбца объединенной модели.

Например, если вы хотите сгруппировать по name колонку квалификации:

User.joins(:qualification).group('qualifications.name').count 

Используйте символ :qualification, описывающее отношение к методу joins, но использовать имя таблицы 'qualifications' в методе group в порядке для указания столбца. Это будет генерировать запрос SQL, как это:

SELECT COUNT(users.id) 
FROM users 
INNER JOIN qualifications ON users.qualification_id = qualifications.id 
GROUP BY qualifications.name 
+0

Спасибо это работает :) –

Смежные вопросы