使用没有attr_accessible的枚举

时间:2016-05-30 05:14:50

标签: ruby-on-rails enums

为了在rails 4.2项目上向后兼容,我使用的是protected_attributes gem。在User模型上,我有以下声明

 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 gem和枚举,并阻止用户授予自己管理员角色。

1 个答案:

答案 0 :(得分:2)

我的解决方法如下。我确保只有:admin角色可以在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!