ActiveRecord在Rails中没有爆炸时保存异常

时间:2017-08-15 18:26:06

标签: mysql ruby-on-rails ruby-on-rails-4 activerecord ruby-on-rails-5

我的控制器中有这个代码:

 @user = User.new(params.require(:user).permit(:email,:password))
    if @user.save
      redirect_to(home_users_path, :notice => "Success")
    else
      redirect_to(new_user_path , :notice => 'Signup Failed.')
    end

但是我在UsersController #create中获得了ActiveRecord :: RecordNotUnique。

我知道记录不是唯一的,我的问题是我使用.save,它不应该生成任何异常但返回false。但在我的应用程序中.save表现为保存!

1 个答案:

答案 0 :(得分:3)

的确,当模型中有validates :status, uniqueness: true时,save!会引发异常,但save则不会。

但是ActiveRecord::RecordNotUnique被引发,因为列上有唯一性索引,因此验证是在数据库级别上执行的。与ActiveRecord::RecordNotFound一样,调用find方法时,虽然find不是爆炸方法