【问题标题】: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

【问题讨论】:

    标签: ruby-on-rails database activerecord user-roles


    【解决方案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 语句放在哪里?在验证或一些回调中?
    猜你喜欢
    • 2017-01-21
    • 1970-01-01
    • 2015-12-11
    • 2015-05-07
    • 1970-01-01
    • 2017-12-24
    • 1970-01-01
    • 1970-01-01
    • 2017-02-10
    相关资源
    最近更新 更多