Rails 3:处理ActiveRecord :: RecordNotUnique异常

时间:2011-01-05 21:44:29

标签: ruby-on-rails ruby-on-rails-3

如何处理控制器中的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 个答案:

答案 0 :(得分:23)

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

答案 1 :(得分:4)

使用此验证方法 validate_uniqueness_of 并不能保证不存在重复的记录插入。

你应该看here

答案 2 :(得分:2)

您可以添加唯一性验证,但仍有机会更改代码而无需使用救援。

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,如果没有支票就会是唯一的。