Может ли быть так, что неуникальные значения создаются во время транзакции?
Методы проверки проверяют перед транзакцией, а затем все значения по-прежнему отсутствуют в таблице и поэтому уникальны.
Редактировать: Создать индекс с уникальным свойством, включенным для вашего поля, и транзакция завершится неудачно, что предотвратит добавление неуникальных элементов.
Чтобы сделать что-то, вы должны добавить что-то в файл миграции
add_index("tablename", "fieldname", { :name => "fieldname_index", :unique => true })
Редактировать 2: Транзакция, подобная этой, выдаст ошибку типа «ActiveRecord :: StatementInvalid: Mysql :: Error: Дублирующая запись« 123 »для ключа 1: <оператор SQL здесь>».
Table.transaction do
i1 = Table.new
i1.fieldname = "123"
i1.save
i2 = Table.new
i2.fieldname = "123"
i2.save
end