1

我有這樣的代碼在我的控制器砰的一聲:的ActiveRecord上保存提高例外沒有Rails的

@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 

,但我得到的ActiveRecord :: RecordNotUnique在UsersController#創建。

我知道記錄不是唯一的,我的問題是我正在使用.save應該不會產生任何異常但返回false。但在我的應用程序中.save表現得像保存!

回答

3

確實,當您在該模型中有validates :status, uniqueness: true時,save!會引發異常,但save不會。

但是ActiveRecord::RecordNotUnique被提出,因爲列上有唯一性索引,所以驗證在數據庫級別上執行。就像ActiveRecord::RecordNotFound,當調用find方法,雖然find不是一個爆炸方法

+0

添加驗證:電子郵件,:唯一性:真正解決了我的問題。我以爲rails會自己處理db級別的異常。非常感謝! –