gpt4 book ai didi

ruby-on-rails - 如何在 Rails 5 中通过 has_many 进行分组

转载 作者:行者123 更新时间:2023-11-29 14:14:57 25 4
gpt4 key购买 nike

我有以下联想:

class Certificate < ApplicationRecord
has_many :certificates_users
has_many :users, :through => :certificates_users
end

class CertificatesUser < ApplicationRecord
belongs_to :user
belongs_to :certificate
end

class User < ApplicationRecord
has_many :certificates_users, :dependent => :delete_all
has_many :certificates, :through => :certificates_users
end

我正在尝试获取证书列表,然后按用户对其进行分组。基本上,列出所有用户并在他们下面显示他们的证书子列表。 UI looks like 是这样的只需点击 table 上的“市长”。

这是CertificatesUser 表的结构

=> CertificatesUser(certificate_id: integer, user_id: integer, expiry_date: date, certificate_number: string, renewal_date: date, ispublic: integer)

关注此其他 answer ,我能够产生这些可能的解决方案,

Certificate.joins(:users).group('users.id').select('users.id')

User.joins(:certificates).group('certificates.id').select('certificates.id, certificates.name')

这里的问题是,我需要的大部分字段都在 certificates_users 中,而不是在 certificates 表中。

这是尝试让它工作的另一种尝试,但没有奏效 - CertificatesUser.group(:user_id).select('user.id')

还有什么其他可能的解决方案?

期望的输出

enter image description here

最佳答案

你可以做到

@users = User.includes(certificates_users: [:certificate])

然后你可以遍历它们

@users.each do |u|
u.certificates_users.each do |cu|
cu.certificate_number
cu.certificate.some_column
...
end
end

只获取有证书的用户

@users = User.includes(certificates_users: [:certificate]).where("certificates_users.user_id = users.id")

关于ruby-on-rails - 如何在 Rails 5 中通过 has_many 进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52301220/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com