Rails计算多态关联中的记录数

时间:2017-10-29 22:20:09

标签: ruby-on-rails

我的应用程序中有多态关联,我希望能够计算组中的用户数,并列出每个组中的用户。我怎样才能做到这一点?

class Group < ApplicationRecord
  has_many :user_groups
  has_many :users, through: :user_groups
end

class User < ApplicationRecord
  has_many :user_groups
  has_many :groups, through: :user_groups
end

class UserGroup < ApplicationRecord
  belongs_to :user
  belongs_to :group
end

我现在可以致电User.first.groups但是我无法拨打User.groups.allUser.all.groups,但这些都不起作用。

1 个答案:

答案 0 :(得分:0)

首先,这不是多态关联。仅供参考。

很难知道你在问什么,因为要计算一个群组中的用户,你可以:

group.users.count

当你说'列出'时,你的意思是在视图中吗?那将是这样的:

<%- group.users.each do |user| %>
  # do something with user
<% end %>

只是为了扩展评论,如果类Image具有多态belongs_to关联,则可能类似于:

# == Schema Information
#
# Table name: images
#
#  id               :integer          not null, primary key
#  imageable_id     :integer
#  imageable_type   :string
#  created_at       :datetime         not null
#  updated_at       :datetime         not null
#
class Image < ApplicationRecord
  belongs_to :imageable, polymorphic: true
end

如您所见,Image类的属性为imageable_idimageable_type。然后,如果您希望Document有多个images,那么您可能会遇到以下情况:

class Document < ApplicationRecord
  has_many :images, as: :imageable
end    

然后你可以这样做:

image.imageable

获取image所属的对象。要获得images的所有document,只需:

document.images