我有一个模型Clients
以及一个包含lastname
和firstname
列的相应数据库。最初对[lastname, firstname]
的唯一性没有限制,数据库当前包含重复项。我想清理数据库并对模型施加约束,例如:validates_uniqueness_of :lastname, scope: :firstname
。
我想到的想法是以某种方式备份数据,对空模型数据库施加约束,然后将重复数据拉回来,我现在可以单独处理从异常中抢救。
然而,我觉得我在这里做了一些不切实际的事情。有没有更好的“轨道方式”来做到这一点?
答案 0 :(得分:1)
唯一真正发现问题的纯Rails方法是遍历每个模型并确保它仍然有效。例如,粗略地说:
Client.all.each do |client|
unless (client.valid?)
puts "Client #{client.id} invalid: #{client.errors.full_messages}"
end
end
如果需要太多内存,加载all
条记录可能不是一个好主意。 ActiveRecord 3.0应该更加明智,将其加载到块中,但我现在无法证明这种情况。
关于您对重复数据的处理方式:
我认为您的生产数据库会按原样进行常规快照,在这种情况下,您可以从中获取测试数据。如果不是这种情况,那么您的首要任务应该是确保它是。