【发布时间】:2010-05-07 20:10:02
【问题描述】:
我有一个名为 HeroStatus 的模型,它具有以下属性:
- 身份证
- user_id
- recordable_type
- hero_type(可以为 NULL!)
- recordable_id
- created_at
有超过 100 个 hero_statuse,一个用户可以拥有多个 hero_status,但不能多次拥有同一个 hero_status。
用户的 hero_status 由 recordable_type + hero_type + recordable_id 的组合唯一标识。我想说的是,特定用户不能有重复的 hero_status。
不幸的是,我没有适当的验证来确保这一点,所以在我进行了一些代码更改后,我得到了一些重复的 hero_statuses 供用户使用。例如:
user_id = 18
recordable_type = 'Evil'
hero_type = 'Halitosis'
recordable_id = 1
created_at = '2010-05-03 18:30:30'
user_id = 18
recordable_type = 'Evil'
hero_type = 'Halitosis'
recordable_id = 1
created_at = '2009-03-03 15:30:00'
user_id = 18
recordable_type = 'Good'
hero_type = 'Hugs'
recordable_id = 1
created_at = '2009-02-03 12:30:00'
user_id = 18
recordable_type = 'Good'
hero_type = NULL
recordable_id = 2
created_at = '2009-012-03 08:30:00'
(后两个显然不是重复。前两个是。)所以我想做的是摆脱重复的 hero_status。哪一个?日期最近的那个。
我有三个问题:
如何使用纯 SQL 方法删除重复项?
如何使用纯 Ruby 解决方案删除重复项?类似的东西:Removing "duplicate objects"。
如何进行验证以防止将来出现重复条目?
【问题讨论】:
-
这不应该是一个社区维基。
-
所以下次我会知道,你应该什么时候加入,什么时候不应该加入?
标签: mysql ruby-on-rails ruby validation activerecord