Rails 3: обрабатывать ActiveRecord :: RecordNotUnique Exception - PullRequest
15 голосов
/ 06 января 2011

Как я могу обработать 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

Ответы [ 3 ]

26 голосов
/ 06 января 2011
begin
  # do stuff
rescue ActiveRecord::RecordNotUnique
  # handle the exception however you want to
end

http://ruby -doc.org / документы / ProgrammingRuby / html / tut_exceptions.html

Вы также можете использовать rescue_from, если вам часто приходится иметь дело с этим.

4 голосов
/ 27 июня 2012

Использование этого метода проверки validate_uniqueness_of не гарантирует отсутствие дублирующих вставок записей.

Вы должны посмотреть здесь

2 голосов
/ 06 января 2011

Вы можете добавить проверку уникальности и при этом иметь возможность изменить код без необходимости использовать спасение.

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, и он будет уникальным без чека.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...