角色属性只能创建一个主体(用户),该属性为enum+rails

w41d8nur  于 2022-09-21  发布在  Ruby
关注(0)|答案(2)|浏览(109)

我对Rails和创建学校应用程序是新手,在其中我为用户赋予了决定用户角色的属性角色,我想创建只有一个用户可以是校长(角色),我如何实现在应用程序中不能创建多个主体用户,我正在使用Devise进行身份验证...

我尝试了这个=>验证:角色,:唯一性=>{:角色=>“主体”}

但它限制了我创建任何类型的用户,在我的用户枚举中,我已经分配了4个角色[管理员、校长、教师、学生]

如有任何帮助或建议,我们将不胜感激。先谢谢你

hjqgdpho

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与当前用户不同)。如果存在这样的用户,则向角色属性添加验证错误。

请注意,例如,当您想要支持多所学校并且每个学校都有不同的校长时,您可能需要向数据库查询添加更多条件。

hmtdttj4

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

相关问题