2013-04-03 21 views
0

我有這樣的情況:我有用戶表,我按類型劃分用戶:管理員,經理,客戶。如何在更改用戶角色時避免數據庫異常?

只能使用管理器模型(管理器has_many管理器)創建管理器,並且它是以嵌套形式創建的。

我想將客戶升級到管理員如果有人嘗試使用已註冊的客戶電子郵件創建經理。

現狀:

當我試圖與客戶的電子郵件顯示它我的數據庫錯誤創建管理器。我可以做一些驗證來改變客戶類型 - >到 - >管理器,但它仍然想保存管理器記錄,並顯然失敗,並給我下一個錯誤。

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

我該如何處理這個RIGHT

P.S.以下是我的型號代碼:

class Organizer 
accepts_nested_attributes_for :managers 
has_many :managers 
___________________ 

class Manager < User 
belongs_to :organizer 

___________________ 

class Customer < User 

回答

0

您應該首先檢查您的用戶表中是否存在具有指定電子郵件ID的記錄。

  • 如果是,更新在記錄管理器中的角色山坳,
  • 否則插入新記錄。
+0

很容易說)我需要驗證管理員的電子郵件時間正在改變或創建,所以如果我已經採取這個電子郵件,我怎麼可以跳過保存? – skrypalyk

+0

select count(rowid)from users where where email =';'如果它返回大於0,則您已擁有該用戶。 –

+0

我可以通過這個ecode找到客戶:'Customer.find_by_email(self.email)',但我怎樣才能跳過保存記錄?我如何做跳過記錄保存?看起來,你並沒有解決問題。我會寫更多的問題。 – skrypalyk

相關問題