我有一个模型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。
答案 0 :(得分:4)
有几种方法。
使用单表继承(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
(字符串)列。
答案 1 :(得分:1)
您是否认为,而不是制作AdminUser类,可能会将该功能转换为模块,混合或gem。文章和作者作为课程具有完美的意义。但是,您似乎希望作者具有管理功能,但只有部分时间。做这样的事情可能是:
class Author < ActiveRecord::Base
# Only include properties if this particular author should have them
if self.is_admin?
has_admin_functions
end
end
答案 2 :(得分:0)
为什么不使用author和admin标志创建单个用户类?