我有两个独立的模型:" page"和"用户"。我想要一个"评论"可以评论"页面的模型"或者"用户",但不能同时使用两者。我想做这样的事情:
class Comment < ActiveRecord::Base
belongs_to :page
belongs_to :user
end
但我不确定这是否是正确的做法。处理这种情况的最佳方法是什么?
答案 0 :(得分:4)
您似乎需要的是Polymorphic Associations。
class Comment < ActiveRecord::Base
belongs_to :commentable, polymorphic: true
end
class User < ActiveRecord::Base
has_many :comments, as: :commentable
end
class Page < ActiveRecord::Base
has_many :comments, as: :commentable
end
迁移:
class CreateUsers < ActiveRecord::Migration # and similar for Pages
def change
create_table :users do |t|
...
t.references :commentable, polymorphic: true
...
end
end
end
class CreateComments < ActiveRecord::Migration
def change
create_table :comments do |t|
...
t.integer :commentable_id
t.string :commentable_type
...
end
end
end