如果一个模型可能会关联多种模型,我们可以创建 Polymorphic 类型的关联,也就是多态关联 .. 比如一个评论,可能属于文章模型,也可能属于照片模型,也就是你在文章或者照片的内容上都可以去添加评论。
先创建一个 Comment 模型,表示评论 ...
rails generate model Comment content:text
再添加一个 Photo 模型,表示照片 ..
rails generate model Photo title:string
然后先找到 Comment 模型 ... 编辑一下它 .. 添加一个 belongs_to :commentable ... 然后把 polymorphic 设置成 true ... 这里的 :commentable 是我们自己起的一个名字 ... 它有点像是一个接口 ... 在可以添加评论的模型上需要用到这个名字 ..
再找到 Post 模型 ... 添加一个 has_many :comments, as: :commentable ...
然后找到 Photo 模型 .. 也添加一个 has_many :comments, as: :commentable ..
再打开创建评论表的 migration ...
添加一个 t.references :commentable, polymorphic: true, index, true ... 这行代码会在 comments 表里添加一个 commentable_type ,还有一个 commentable_id ...
运行一下 migraiton ... rails db:migrate ..
完成以后去查看一下数据库 .. . 检查一下 comments 这个数据表的结构 ... 这里会出现一个 commentable_type .. 类型是字符串 .. 在创建评论的时候它可以存储评论的内容的类型,比如 Post 或者 Photo ..
commentable_id 是一个整数类型的栏 .. 它存储的是评论的内容的 id 号 ... 可能是文章的 id ,也可以是照片的 id ...