Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何在更改用户角色时避免数据库异常?_Ruby On Rails_Database_Activerecord_User Roles - Fatal编程技术网

Ruby on rails 如何在更改用户角色时避免数据库异常?

Ruby on rails 如何在更改用户角色时避免数据库异常?,ruby-on-rails,database,activerecord,user-roles,Ruby On Rails,Database,Activerecord,User Roles,我有这样的情况:我有用户表,我按类型划分用户:管理员、经理、客户 只能使用Organizer模型(Organizer有许多管理器)创建管理器,并且它是在嵌套表单上创建的 如果有人试图使用已注册的客户电子邮件创建经理,我想将客户升级为经理 当前情况: 当我试图用客户的电子邮件创建Manager时,它会向我显示数据库错误。我可以进行一些验证,以更改客户类型->到->经理,但它仍然希望保存经理记录,显然失败了,并给我下一个错误 ActiveRecord::RecordNotUnique:

我有这样的情况:我有用户表,我按类型划分用户:管理员、经理、客户

只能使用Organizer模型(Organizer有许多管理器)创建管理器,并且它是在嵌套表单上创建的

如果有人试图使用已注册的客户电子邮件创建经理,我想将客户升级为经理

当前情况:

当我试图用客户的电子邮件创建Manager时,它会向我显示数据库错误。我可以进行一些验证,以更改客户类型->到->经理,但它仍然希望保存经理记录,显然失败了,并给我下一个错误

   ActiveRecord::RecordNotUnique:
   PG::Error: ERROR:  duplicate key value violates unique constraint "index_users_on_email"
我怎样才能处理好这件事

注意:这是我的型号代码:

 class Organizer
 accepts_nested_attributes_for :managers
 has_many :managers
 ___________________

 class Manager < User
 belongs_to :organizer

 ___________________

 class Customer < User
课程组织者
接受:管理器的\u嵌套\u属性\u
有很多:经理
___________________
类管理器<用户
属于:组织者
___________________
类客户<用户

您应该首先检查用户表中是否存在具有指定电子邮件ID的记录

  • 如果是,则将该记录中的角色列更新为经理
  • 否则,请插入新记录

很容易说)我需要在经理的电子邮件更改或创建时对其进行验证,因此,如果此电子邮件已被接收,我如何可以跳过保存?从用户中选择计数(rowid),其中电子邮件=';'如果返回值大于0,则表示您已拥有该用户。我可以使用此ecode找到客户:
customer。通过电子邮件(self.email)查找客户。
但我如何跳过保存记录?我如何跳过记录保存?看来,你们不了解这个问题。我会写更多的问题。使用if/else条件句。。。如果(客户存在)更新角色else插入客户我应该将if语句放在哪里?在验证中还是在回调中?