我对Rails和创建学校应用程序是新手,在其中我为用户赋予了决定用户角色的属性角色,我想创建只有一个用户可以是校长(角色),我如何实现在应用程序中不能创建多个主体用户,我正在使用Devise进行身份验证...
我尝试了这个=>验证:角色,:唯一性=>{:角色=>“主体”}
但它限制了我创建任何类型的用户,在我的用户枚举中,我已经分配了4个角色[管理员、校长、教师、学生]
如有任何帮助或建议,我们将不胜感激。先谢谢你
hjqgdpho1#
我会使用如下的自定义验证:
validate :one_principal_exists private def one_principal_exists return unless principal? return unless User.where.not(id: id).exists?(role: 'principal') error.add(:role, 'already exists') end
其想法是首先检查当前用户是否为主体,如果不是,则跳过验证。然后检查数据库中是否已有另一个具有主体角色的用户(其ID与当前用户不同)。如果存在这样的用户,则向角色属性添加验证错误。
请注意,例如,当您想要支持多所学校并且每个学校都有不同的校长时,您可能需要向数据库查询添加更多条件。
hmtdttj42#
在模型中使用以下代码
User.rb
before_create :check_principle def check_principle if User.find_by(role: "principle") errors.add(:code, "principle already exist") return false end end
2条答案
按热度按时间hjqgdpho1#
我会使用如下的自定义验证:
其想法是首先检查当前用户是否为主体,如果不是,则跳过验证。然后检查数据库中是否已有另一个具有主体角色的用户(其ID与当前用户不同)。如果存在这样的用户,则向角色属性添加验证错误。
请注意,例如,当您想要支持多所学校并且每个学校都有不同的校长时,您可能需要向数据库查询添加更多条件。
hmtdttj42#
在模型中使用以下代码
User.rb