2017-10-29 10 views
0

私はアプリケーション内に多相関連があり、グループ内のユーザー数を数え、各グループにユーザーをリストしたいと考えています。どうすればこれを達成できますか?私はUser.groups.allUser.all.groupsが、これらの作品のどれを呼び出すことができないのですが、現時点で 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を呼び出すことができます。

答えて

0

まず、これは多態的な関連ではありません。ちょうどFYI。

これは、グループ内のユーザーをカウントするので、あなたが求めているかを知るのは難しいです、あなたは:

group.users.count 

あなたは、「それらを一覧表示する」と言う、あなたはビューで意味ですか?あなたが見ることができるように

# == 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:クラスImageは次のようになります多型belongs_to関連付けを、持っていた場合は、単にコメントに展開する

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

:それはようなものになるだろうクラスは、imageable_idimageable_typeという属性を持っています。あなたはDocumentは多くのimagesを持っている持っていると思った場合はその後、あなたのような同じなものになります。そして、あなたは

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

を行うことができます:

image.imageable 

imageが属しているオブジェクトを取得するには。単に、documentのすべてのimagesを取得するには:ポリモーフィックな関連はない場合、これは何を

document.images 
+0

と呼ばれるのでしょうか?あなたのソリューションは私のために働いた。私は考え過ぎていると思う。 –

+2

これは多対多の関係です。多態性 - モデルは効果的に複数の他のモデルに属します。例 - イメージはユーザーまたはドキュメントに属することができます。したがって、 'User'と' Document'の多相性を表すImageで 'imageable'と呼ばれる層があるかもしれません。 – kiddorails

+0

もう少し正確に言うと、議論されているような多相関連では、 'image'オブジェクトは他の一つのオブジェクトにしか属しません。しかし、そのオブジェクトは任意の 'クラス 'になることができます。あなたが言うように、例えば、 'User'や' Document'のインスタンスです。 'belongs_to:imageable、polymorphic:true'、' imageable'、 'imageable ='は 'image'オブジェクトで利用可能なメソッドです。これは取得/設定を可能にします。 – jvillian

関連する問題