首先很久没有写过 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 。奏是这样。