2016-05-31 76 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'")