Ruby on rails 如何在更改用户角色时避免数据库异常?
我有这样的情况:我有用户表,我按类型划分用户:管理员、经理、客户 只能使用Organizer模型(Organizer有许多管理器)创建管理器,并且它是在嵌套表单上创建的 如果有人试图使用已注册的客户电子邮件创建经理,我想将客户升级为经理 当前情况: 当我试图用客户的电子邮件创建Manager时,它会向我显示数据库错误。我可以进行一些验证,以更改客户类型->到->经理,但它仍然希望保存经理记录,显然失败了,并给我下一个错误Ruby on rails 如何在更改用户角色时避免数据库异常?,ruby-on-rails,database,activerecord,user-roles,Ruby On Rails,Database,Activerecord,User Roles,我有这样的情况:我有用户表,我按类型划分用户:管理员、经理、客户 只能使用Organizer模型(Organizer有许多管理器)创建管理器,并且它是在嵌套表单上创建的 如果有人试图使用已注册的客户电子邮件创建经理,我想将客户升级为经理 当前情况: 当我试图用客户的电子邮件创建Manager时,它会向我显示数据库错误。我可以进行一些验证,以更改客户类型->到->经理,但它仍然希望保存经理记录,显然失败了,并给我下一个错误 ActiveRecord::RecordNotUnique:
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的记录
- 如果是,则将该记录中的角色列更新为经理
- 否则,请插入新记录
customer。通过电子邮件(self.email)查找客户。
但我如何跳过保存记录?我如何跳过记录保存?看来,你们不了解这个问题。我会写更多的问题。使用if/else条件句。。。如果(客户存在)更新角色else插入客户我应该将if语句放在哪里?在验证中还是在回调中?