项目中经常会有这样的情况,一个模型是多个模型的子模型
比如Picture可以是User也Article的子模型
Picture belongs_to User
Picture belongs_to Article
这个时候可以建立多态管理
class Picture <ActiveRecord::Base
belongs_to :imageable,polymorphic: true
end
class User < ApplicationRecord
has_many :pictures, as: :imageable
end
class Article < ApplicationRecord
has_many :pictures, as: :imageable
end
这样对于user article而言,仍然和普通has_many没有区别,拥有pictures方法
而对于picture对象,只能通过调用imageable获取父对象,有可能是user也有可能是article
赋值如下
pic.imageable = User.first
pic.imageable = Article.first
article.pictures = [pic]
user.pictures = [pic]