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

Posted

技术标签:

【中文标题】更改用户角色时如何避免数据库异常?【英文标题】:How to avoid DB exceptions when changing users role? 【发布时间】:2013-03-25 04:23:41 【问题描述】:

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

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

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

目前情况:

当我尝试使用客户的电子邮件创建经理时,它显示数据库错误。我可以进行一些验证以将客户类型 -> 更改为 -> 经理,但它仍然想保存经理记录并且显然失败并给我下一个错误。

   ActiveRecord::RecordNotUnique:
   PG::Error: ERROR:  duplicate key value violates unique constraint "index_users_on_email"

我该如何处理这个RIGHT

附:这是我的模型代码:

 class Organizer
 accepts_nested_attributes_for :managers
 has_many :managers
 ___________________

 class Manager < User
 belongs_to :organizer

 ___________________

 class Customer < User

【问题讨论】:

【参考方案1】:

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

如果是,则将该记录中的角色 col 更新为 Manager, 否则插入一条新记录。

【讨论】:

这很容易说)我需要在经理的电子邮件更改或创建时验证它,所以如果这封电子邮件已经被占用,我怎么能跳过保存? select count(rowid) from Users where email=';'如果返回大于 0,则您已经拥有该用户。 我可以用这个ecode找到客户:Customer.find_by_email(self.email)但是我怎么能跳过保存记录?以及如何跳过记录保存?看来,你不理解问题。我会写更多的问题。 使用 if/else 条件... if(customer exists) update role else insert customer 我应该把 if 语句放在哪里?在验证或一些回调中?

以上是关于更改用户角色时如何避免数据库异常?的主要内容,如果未能解决你的问题,请参考以下文章

如何让任何视图知道用户角色(ASP.NET MVC 身份)已更改,以强制任何用户在浏览时注销?

测试数据时如何避免空指针异常

SQLServer更改用户定义的数据库角色

如何在设计时避免 XAML 代码中的“对象引用未设置为对象的实例”异常?

Spring的JdbcTemplate查询数据库时,使用queryForList().get(0)返回单行查询时会产生异常,请问如何避免?

当数据网格行在网格中不可见时,如何避免空引用异常?