Rails:如何使用两个" belongs_to"创建模型?关系,其中一个总是空的?

时间:2014-12-16 00:56:32

标签: ruby-on-rails ruby

我有两个独立的模型:" page"和"用户"。我想要一个"评论"可以评论"页面的模型"或者"用户",但不能同时使用两者。我想做这样的事情:

class Comment < ActiveRecord::Base
  belongs_to :page
  belongs_to :user
end

但我不确定这是否是正确的做法。处理这种情况的最佳方法是什么?

1 个答案:

答案 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