Рельсы 3: Управление ActiveRecord:: Исключение RecordNotUnique
Как я могу обработать исключение ActiveRecord::RecordNotUnique
в контроллере? Благодаря
Изменить. Я получаю это исключение при создании уникального кода. Я могу обработать исключение в application_controller.rb, но я действительно хочу, чтобы код был сгенерирован снова, и это должно быть сделано в контроллере.
generate_code
@couponcode = Couponcode.new(:user_id => current_user.id, :code => @code)
Edit2
generate_code
begin
@couponcode = Couponcode.new(:user_id => current_user.id, :code => @code)
rescue ActiveRecord::RecordNotUnique
#generate_code
@code = "111-11111"
@couponcode = Couponcode.new(:user_id => current_user.id, :code => @code)
end
Ответы
Ответ 1
begin
# do stuff
rescue ActiveRecord::RecordNotUnique
# handle the exception however you want to
end
http://ruby-doc.org/docs/ProgrammingRuby/html/tut_exceptions.html
Вы также можете использовать rescue_from
, если вам что-то нужно делать часто.
Ответ 2
Использование этого метода проверки validate_uniqueness_of не гарантирует отсутствие дубликатов записей.
Вы должны посмотреть здесь
Ответ 3
Вы можете добавить проверку уникальности и по-прежнему иметь возможность изменить код без необходимости использования аварийного восстановления.
couponcode.rb
validates_uniqueness_of :code
контроллер:
@couponcode = Couponcode.new(:user_id => current_user.id)
begin
couponcode.code = generate_code
# might want to break out after a limit here
end until @couponcode.valid?
@couponcode.save
Но вы также можете использовать uuid, и он будет уникальным без проверки.