我有一个模型 Author
。我想为每个 Article
分配一个 Author
,但并非所有作者都是 AdminUser
(我的其他模型)。我如何设置模型关联,以便每篇文章都必须有一个作者,但不是每个作者都必须拥有管理员权限?
如果我可以 @article.author
它会返回作者,即使它是 AdminUser
class Author < ActiveRecord::Base
attr_accessor :first_name, :last_name
has_many :articles
end
class AdminUser < ActiveRecord::Base
attr_accessor :first_name, :last_name, #...a bunch of authentication params, passwords, salt, etc
has_many :articles
end
我更喜欢的是不必说@article.admin_user..我希望它总是说@article.author..但我希望能够询问@admin_user.articles。
有几种方法。
使用单表继承 (STI)
class User < ActiveRecord::Base
has_many :articles
end
class Author < User
end
class AdminUser < User
end
class Article < ActiveRecord::Base
belongs_to :user
end
这将要求 users
表具有所有后代使用的所有属性,并且将需要一个 type
列以便 AdminUser
记录记住它是一个 AdminUser
使用多态关联
class Author < ActiveRecord::Base
has_many :articles, as: :owner
end
class AdminUser < ActiveRecord::Base
has_many :articles, as: :owner
end
class Article < ActiveRecord::Base
belongs_to :owner, polymorphic: true
end
这要求 articles
具有 owner_id
和 owner_type
(字符串)列。
我是一名优秀的程序员,十分优秀!