如果我有一個角色的用戶,像這樣:子類模型,我如何範圍ActiveRecord模型?
class User < ApplicationRecord
class Manager < User
def after_initialize do |u|
u.role = User.roles[:manager] if u.new_record?
end
那麼這將允許經理的所有實例自動填充有作用。但是,當我撥打電話時,例如Manager.all
,那麼這會讓我回到用戶的所有實例,因爲它沒有初始化Manager
。預期的行爲是通過角色管理器接收所有用戶。什麼是最好的方式去做這件事?
走這條路線基本上會失去使用枚舉的免費幫手方法,比如'user.manager?'是否有這樣的等價物? – Strawberry
是的,這裏的不同解決方案各有其自己的權衡。 單表繼承適用於有許多類封裝相同信息的類,但在使用該信息時具有不同的行爲。 如果您知道您的用戶只有每個角色都有一個角色,那麼用於指示角色的用戶類的枚舉是很好的。 如果用戶可以有很多角色(經理和主管),那麼可能實施與「角色」模型具有多次通過關係可能更合適。 要獲得由enum給出的幫助器方法,您可以自己編寫它們。 – brendandeere