[英]Using enum without attr_accessible
為了在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和enum,並防止用戶授予自己管理員角色。
我的解決方法如下。 我確保只有: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!
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.