user.rb
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 { ??? }
答案 0 :(得分: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
joins
):http://guides.rubyonrails.org/active_record_querying.html JOINS
的解释:http://www.w3schools.com/sql/sql_join.asp