2016-05-31 106 views
0

假設我有columns: name, mobile, email, card_num, etc.檢查重複的ActiveRecord和返回重複列名

的手機,電子郵件的模型User,card_num不能重複。

validates_uniqueness_of :mobile 
validates_uniqueness_of :email 
validates_uniqueness_of :card_num 

反正是有任何檢查,頂多在ONE查詢任何重複的記錄,並返回重複列?

現有的記錄:

name mobile  email   card_num 
============================================ 
Mary 65666678 [email protected] A001 

新記錄1:

name mobile  email   card_num 
============================================ 
Peter 65666678 [email protected] A002 

將返回 「移動

新紀錄2:

name mobile  email   card_num 
============================================ 
Peter 74009822 [email protected] A002 

將返回 「電子郵件

新記錄3:

name mobile  email   card_num 
============================================ 
Peter 65666678 [email protected] A001 

在回報 「電子郵件」/ 「移動」/ 「card_num」 就行了。

回答

0

嘿,你可以試試這個方法:

考慮你插入新記錄-2,那麼你只火查詢爲:

User.select("CASE 
     WHEN (name = 'Peter') THEN 'name' 
     WHEN (mobile = '74009822') THEN 'mobile' 
     WHEN (email = '[email protected]') THEN 'email' 
     ELSE 'card_num' 
     END as col_name").where("name = 'Peter' or mobile = '74009822' or email = '[email protected]' or card_num='A002'")