所属轨道中的组功能

Has*_*mad 2 ruby enums activerecord ruby-on-rails

user.rb

enum gender: [:Male, :Female] 
belongs_to :qualification
Run Code Online (Sandbox Code Playgroud)

资格证书

has_many :users
Run Code Online (Sandbox Code Playgroud)

当我查询

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

它给我

{"Male"=>18, "Female"=>1}
Run Code Online (Sandbox Code Playgroud)

但是我不知道要为资格做同样的事情,因为其中涉及到联想,我该怎么做?

User.all.group(:qualification_id).count.map { ??? }
Run Code Online (Sandbox Code Playgroud)

Cai*_*lou 6

您可以通过使用关联joins() 名称在关联的模型之间执行联接,然后按联接的模型的任何列进行分组。

例如,如果name 要按资格列分组:

User.joins(:qualification).group('qualifications.name').count
Run Code Online (Sandbox Code Playgroud)

:qualificationjoins方法中使用描述关系的符号,但'qualifications'group方法中使用表名以指定列。这将生成一个如下的SQL请求:

SELECT COUNT(users.id)
FROM users
INNER JOIN qualifications ON users.qualification_id = qualifications.id
GROUP BY qualifications.name
Run Code Online (Sandbox Code Playgroud)