如果值匹配或为零,则Rails合并重复项

时间:2015-05-26 12:47:39

标签: ruby-on-rails activerecord merge duplicates

我正在尝试清理一些数据。

我有各种形式的详细信息和各种副本。

models/object.rb

attr_accessible :name, :email, :assoc_id

我想合并名称匹配的重复项,并且电子邮件匹配或为nil,而assoc_id要么匹配,要么为nil。

我不确定如何编写查询以恢复匹配或nil的对象组。

即。

grouped_objects = Object.group_by{|o| [o.name]}

让我按名称分组

grouped_objects = Object.group_by{|o| [o.name, o.email]}

带我分组姓名和电子邮件。

问题是许多对象都缺少数据。

只想快速而又脏,以便在没有其他信息的情况下,我会将记录合并在一起。

但是,如果有人使用不同的电子邮件或不同的assoc_id,我将不会合并。欣赏会有一些错误记录,但我们最终会得到改善

如何编写该activerecord查询?

 grouped_objects = Object.group_by{|o| [o.name, o.email || o.email == nil]}

希望有道理,

1 个答案:

答案 0 :(得分:0)

我认为更好的方法是让你的模型不能容忍重复。您可以直接在模型中防止重复。因此,当您的控制器尝试创建一个对象时,它会先检查您决定的某个元素是否存在它。

因此,如果您希望某个元素使您的对象具有唯一性,那么最好在MyModel.rb中执行类似的操作(假设您希望名称和电子邮件字段具有唯一性):

class MyModel < ActiveRecord::Base

  attr_accessible :name, :email, :assoc_id

  validates_uniqueness_of :name
  validates_uniqueness_of :email, :allow_nil => true # or :allow_blank => true

  # Your code...

end

如果您不希望大写字母与小写字母不同,您也可以使用:case_sensitive => false

希望这就是你要找的东西!