我正在尝试清理一些数据。
我有各种形式的详细信息和各种副本。
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]}
希望有道理,
答案 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
。
希望这就是你要找的东西!