Rails 的多态关联

首先很久没有写过 markdown, 真是不进则退,还好 google 了下,要感谢这篇文章 献给写作者的 Markdown 新手指南

多态关联的使用场景

  • 假如一个网站可以展示图片和文章,现在要对两者加入评论功能,我们可能会想到各自添加一张关联表,image_comments 和 post_comments ,但是这两张表除了关联字段,其他几乎都是相同的。

  • 在微信开发的时候,有个自动回复功能和带参数二维码的功能。当用户给公众号发送了消息,触发了一条自动回复规则,系统就会自动调用相对应的回复内容给用户;当用户扫描二维码时,同样可以调用一个回复内容给用户,这里两者的回复内容基本是相同的结构。

  • 等等 这样类似的关系。

多态关联的用法

以评论功能为例,Rails 里是这么做的,辞穷,直接上代码吧,非真实代码,我想象的。

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

class Post < ActiveRecord::Base
  has_many :comments, as: :commentable
end

class Image < ActiveRecord::Base
  has_many :comments, as: :commentable
end

我们需要一张 comments 表能关联 posts 表或 images 表

class CreateComments < ActiveRecord::Migration
  def change
    create_table :products do |t|
      t.integer :user_id
      t.text :content
      t.integer :commentable_id
      t.string  :commentable_type
      t.timestamps null: false
    end

    add_index :comments, :commentable_id
  end
end

基本奏是这样。然后就更正常的关联表一样使用就可以了,正常使用是怎么使用,可以参考这里 Polymorphic associations 。奏是这样。

你可能感兴趣的:(Rails 的多态关联)