我有一个Comment模型,它属于其他一些模型,如Post,Page等和has_one(或belongs_to?)用户模型。但是我也需要用户可以评论,所以用户必须有很多来自其他用户的评论(这是多态的:可评论的关联),他必须有自己的评论,由他撰写。 建立像这样的协会的最佳方式是什么?如果用户与评论有两种不同的关联,如何在控制器中读取和创建用户评论? 现在我这样做了,我猜错了:
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
答案 0 :(得分: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
,因为Rails无法从Comment
找到commented_on
。