Usando nova tentativa para resgatar ActiveRecord :: RecordNotUnique

Se você estiver usando índices exclusivos do banco de dados (e deveria!), Você pode acabar tendo que lidar com ActiveRecord :: RecordNotUnique por causa das condições de corrida do banco de dados.

Para resgatar de tais exceções, você pode usar o método Ruby de repetição:

def self.set_flag( user_id, flag )
# Making sure we only retry 2 times
tries
||= 2

flag
= UserResourceFlag.where( :user_id => user_id , :flag => flag).first_or_create!

rescue ActiveRecord::RecordNotUnique
retry unless (tries -= 1).zero?
end