2016-05-30 45 views
1

对于rails 4.2项目的向后兼容性,我使用的是protected_attributes gem。在User模型我有以下声明在没有attr_accessible的情况下使用枚举

enum access_level: [:general, :marketing, :admin] 

如果我尝试做user.admin!,我得到以下错误:

ActiveModel::MassAssignmentSecurity::Error: Can't mass-assign protected attributes for User: access_level 

这可以通过声明

attr_accessible :access_level 

但解决我不想让用户可以让自己担任管理员角色。有没有简单的方法,我可以继续使用protected_attributes宝石和枚举,并防止用户授予他们自己的管理角色。

回答

2

我的解决方法如下。我确保只有:管理员角色可以在access_level上进行批量分配;

attr_accessible :access_level, as: :admin 

然后定义的下列方法

def set_admin 
    update({access_level: 2}, as: :admin) 
    end 

其用于代替admin!。所有其他只读枚举方法,如admin?Admin.admin工作。可以为其他枚举可能性定义类似的方法。当应用程序升级到使用strong_parameters时,应该很容易进行搜索并替换为使用admin!

相关问题