用户名

enum gender: [:Male, :Female]
belongs_to :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 { ??? }

最佳答案

您可以使用 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
  • ActiveRecord 文档(搜索 joins ):http://guides.rubyonrails.org/active_record_querying.html
  • SQL 说明 JOINS : http://www.w3schools.com/sql/sql_join.asp
  • 关于ruby-on-rails - 在belongs_to 关联rails 中的组函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35086845/

    10-11 17:16
    查看更多