私は、ユーザーが多くのコメントを持つことができ、学校が多くのコメントを持つことができ、コメントが多くのコメントを持つことができるこのポリモーフィックな関連付けを持っています (または私の名前の場合は返信):
class Comment < ActiveRecord::Base
attr_accessible :content
has_many :replies, :as => :commentable, :class_name => "Comment" # replies to comments
belongs_to :commentable, :polymorphic => true
belongs_to :commentor, :class_name => "User", :foreign_key => "user_id"
end
class User < ActiveRecord::Base
has_many :comments, :as => :commentable
has_many :commentors, # all users who commented on a user
:through => :comments,
:source => :commentor
end
class School < ActiveRecord::Base
has_many :comments, :as => :commentable
has_many :commentors, # all users who commented on a school
:through => :comments,
:source => :commentor
end
User では、 を使用して、ユーザーにコメントしたすべての人を取得できます@user.commentors
。同じことが学校にも当てはまり@school.commentors
ます。
コメント モデルについては、コメントへのすべてのコメント投稿者 (または返信者だと思います) を見つけることができるコメント モデルについても同じことを実現したいと考えています。ただし、has_many :through アソシエーションは User および School モデルの場合とは異なり、どのようなアソシエーションを作成すればよいかわかりません。