2016-08-30 18 views
1

私は、Post、Pageなどの他のモデルに属し、has_one(またはbelongs_to?)ユーザモデルに属するCommentモデルを持っています。しかし、私はユーザーがコメントできるようにする必要があるので、ユーザーは他のユーザーからの多くのコメントを持っていなければなりません(これは多態的です:コメント可能な関連)。 このような関連付けを行う最善の方法は何ですか?ユーザーがコメントと2つの異なる関連を持つ場合、コントローラのユーザーのコメントを読み込んで作成するにはどうすればよいですか? は今、私はこれを行うと、それは私が推測する権利はありません。Rails多型関連と同じモデルのhas_many

class User < ActiveRecord::Base 
    devise :database_authenticatable, :registerable, 
     :recoverable, :rememberable, :trackable, :validatable 
    has_many :comments, as: :commentable 
    has_many :comments 
end 

class Comment < ActiveRecord::Base 
    belongs_to :commentable, polymorphic: true 
    belongs_to :user 
end 

class CreateComments < ActiveRecord::Migration 
    def change 
    create_table :comments do |t| 
     t.text :content 
     t.references :commentable, polymorphic: true, index: true 
     t.belongs_to :user 
     t.timestamps null: false 
    end 
    end 
end 

答えて

3

あなたはその関連付けのために別の名前を使用したいと思います。

has_many :comments, as: :commentable 
has_many :commented_on, class_name: 'Comment' # you might also need foreign_key: 'from_user_id'. 

See has_many's documentation online

あなたのケースではforeign_keyは必要ありませんが、私はJust In Case™を指摘しています。 Railsはデフォルトで "{class_lowercase} _id"を推測します(Userというクラスにはuser_idがあります)。

次に、両方の関連付けにアクセスできます(class_nameは、Commentcommented_onから見つけることができないため、明示的に必要です)。

関連する問題