Добавление
от
departments = ["this", "that"]
departments.each{|d| Department.where(:name => d).first_or_create}
до
departments = ["this", "that", "there", "then"]
departments.each{|d| Department.where(:name => d).first_or_create}
это простой пример,
Обновление / переименование
от
departments = ["this", "that", "there", "then"]
departments.each{|d| Department.where(:name => d).first_or_create}
до
departments = ["these", "those", "there", "then"]
new_names = [['these', 'this'],['those','that']]
new_names.each do |new|
Department.where(:name => new).group_by(&:name).each do |name, depts|
depts.first.update_column :name, new[0] if new[1] == name # skips validation
# depts[1..-1].each(&:destroy) if depts.size > 1 # paranoid mode
end
end
departments.each{|d| Department.where(:name => d).first_or_create}
ВАЖНО: Вам необходимо обновить элементы массива departments
, иначе обязательно произойдет дублирование.
Обход: Добавьте валидацию_uniqueness_of валидации или валидации уникальности, сравнивая все необходимые атрибуты, НО не используйте методы, пропускающие валидации .