如果您的用户表数据如下
User.all =>
[
#<User id: 15, name: "a", email: "a@gmail.com", created_at: "2013-08-06 08:57:09", updated_at: "2013-08-06 08:57:09">,
#<User id: 16, name: "a1", email: "a@gmail.com", created_at: "2013-08-06 08:57:20", updated_at: "2013-08-06 08:57:20">,
#<User id: 17, name: "b", email: "b@gmail.com", created_at: "2013-08-06 08:57:28", updated_at: "2013-08-06 08:57:28">,
#<User id: 18, name: "b1", email: "b1@gmail.com", created_at: "2013-08-06 08:57:35", updated_at: "2013-08-06 08:57:35">,
#<User id: 19, name: "b11", email: "b1@gmail.com", created_at: "2013-08-06 09:01:30", updated_at: "2013-08-06 09:01:30">,
#<User id: 20, name: "b11", email: "b1@gmail.com", created_at: "2013-08-06 09:07:58", updated_at: "2013-08-06 09:07:58">]
1.9.2p290 :099 >
电子邮件ID是重复的,因此我们的目的是从用户表中删除所有重复的电子邮件ID。
步骤1:
获取所有不同的电子邮件记录ID。
ids = User.select("MIN(id) as id").group(:email,:name).collect(&:id)
=> [15, 16, 18, 19, 17]
第2步:
要从用户表中删除具有重复电子邮件记录ID的重复ID。
现在,ids数组包含以下id。
[15, 16, 18, 19, 17]
User.where("id NOT IN (?)",ids)
User.where("id NOT IN (?)",ids).destroy_all
**铁路4 **
ActiveRecord 4引入了.not
允许您在步骤2中编写以下内容的方法:
User.where.not(id: ids).destroy_all