【问题标题】:ActiveRecord::RecordNotUnique in UsersController#createActiveRecord::RecordNotUnique in UsersController#create
【发布时间】:2016-07-31 18:02:10
【问题描述】:

SQLite3::ConstraintException: UNIQUE 约束失败:users.email: INSERT INTO "users" ("name", "email", "created_at", "updated_at", "password_digest") VALUES (?, ?, ?, ?, ?)

def create
@user = User.new(user_params)
if @user.save #red line here

else
  render 'new'

users_controller.rb

class UsersController < ApplicationController
  def show
@user = User.find(params[:id])
  end
  def new
@user = User.new
  end
  def create
@user = User.new(user_params)
if @user.save
  # Handle a successful save.
else
  render 'new'
end
end
  private

  def user_params
    params.require(:user).permit(:name, :email, :password,
                                 :password_confirmation)
  end
end

用户模型 用户.rb

class User < ApplicationRecord
  before_save { self.email = email.downcase }
  validates :name,  presence: true, length: { maximum: 50 }
  VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i
  validates :email, presence: true, length: { maximum: 255 },
            format: { with: VALID_EMAIL_REGEX }
  has_secure_password
  validates :password, presence: true, length: { minimum: 6 }
end
enter code here

【问题讨论】:

  • 显然您正在尝试使用现有电子邮件地址创建新记录,并且电子邮件字段具有唯一约束。这意味着该列必须具有唯一值。
  • 你能展示你的用户模型吗,错误表明你违反了唯一键约束,请不要使用2个类似的电子邮件来创建对象。

标签: ruby-on-rails ruby activerecord


【解决方案1】:

错误表明您对数据库中的某个字段(在本例中为表users、字段email)有约束,并且您插入的电子邮件已经存在。去看看 users 表的迁移。

【讨论】:

  • 为了清楚起见,我并不是建议您删除约束:D
猜你喜欢
  • 2018-01-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-10
相关资源
最近更新 更多