【问题标题】:ActiveRecord raising exception on save without a bang in Rails在 Rails 中,ActiveRecord 在保存时引发异常
【发布时间】:2017-08-15 18:26:06
【问题描述】:

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

 @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 的行为就像保存一样!

【问题讨论】:

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


    【解决方案1】:

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

    但是ActiveRecord::RecordNotUnique 被提出,因为列上有唯一性索引,所以验证是在数据库级别执行的。就像ActiveRecord::RecordNotFound,当find 方法被调用时,虽然find 不是一个bang-method

    【讨论】:

    • 添加验证 :email, :uniqueness : true 解决了我的问题。我认为 rails 会自己处理数据库级别的异常。非常感谢!
    猜你喜欢
    • 2016-07-11
    • 1970-01-01
    • 2011-09-10
    • 1970-01-01
    • 2016-02-13
    • 1970-01-01
    • 2018-01-07
    • 1970-01-01
    • 2012-08-22
    相关资源
    最近更新 更多