我是rails和创建学校应用程序的新手,在这个应用程序中,我给了用户一个属性角色,决定了用户的角色,而我只想创建一个用户可以是主体(角色(,我如何实现应用程序中不能创建多个主体用户,我正在使用设备进行身份验证。。。
我试过这个=>验证:角色,:唯一性=>{:角色=>"主体"}
但它限制了我创建任何类型的用户,在我的用户枚举中,我给出了4个角色[管理员、校长、教师、学生]
任何帮助或建议都将不胜感激。。。。提前感谢
我会使用这样的自定义验证:
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与当前用户不同(担任主体角色。如果存在这样的用户,则在角色属性中添加验证错误。
请注意,例如,当您希望支持多所学校,并且每个学校都有不同的校长时,您可能需要向数据库查询添加更多条件。
在模型中使用以下代码
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