检查重复的ActiveRecord并返回重复的列名称

时间:2016-05-31 04:05:56

标签: ruby-on-rails ruby-on-rails-4 activerecord

假设我的模型User带有columns: name, mobile, email, card_num, etc.

手机,电子邮件,card_num无法复制。

validates_uniqueness_of :mobile
validates_uniqueness_of :email
validates_uniqueness_of :card_num

是否有任何检查,最多在 ONE 查询任何重复记录并返回重复列?

现有记录:

name   mobile     email            card_num
============================================
Mary   65666678   mary@gmail.com   A001

新纪录1:

name   mobile     email            card_num
============================================
Peter  65666678   peter@gmail.com  A002

将返回“移动

新纪录2:

name   mobile     email            card_num
============================================
Peter  74009822   mary@gmail.com   A002

将返回“电子邮件

新纪录3:

name   mobile     email            card_num
============================================
Peter  65666678   mary@gmail.com   A001

返回“电子邮件”/“移动”/“ card_num ”即可。

1 个答案:

答案 0 :(得分:0)

嘿,你可以这样试试:

考虑您正在插入新记录-2然后您只需触发查询:

User.select("CASE 
       WHEN (name = 'Peter') THEN 'name'
       WHEN (mobile = '74009822') THEN 'mobile'
       WHEN (email = 'mary@gmail.com') THEN 'email'
       ELSE 'card_num'
      END as col_name").where("name = 'Peter' or mobile = '74009822' or email = 'mary@gmail.com' or card_num='A002'")