更改用户角色时如何避免数据库异常?
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='Customer.find_by_email(self.email)
但是我怎么能跳过保存记录?以及如何跳过记录保存?看来,你不理解问题。我会写更多的问题。
使用 if/else 条件... if(customer exists) update role else insert customer
我应该把 if 语句放在哪里?在验证或一些回调中?以上是关于更改用户角色时如何避免数据库异常?的主要内容,如果未能解决你的问题,请参考以下文章
如何让任何视图知道用户角色(ASP.NET MVC 身份)已更改,以强制任何用户在浏览时注销?
如何在设计时避免 XAML 代码中的“对象引用未设置为对象的实例”异常?
Spring的JdbcTemplate查询数据库时,使用queryForList().get(0)返回单行查询时会产生异常,请问如何避免?