首页 > 解决方案 > “存在吗?” 方法不起作用-尝试在保存到数据库之前检查用户是否存在

问题描述

我是 Rails 的新手,正在尝试为我的网站创建一个注册表单。它工作正常,但有一个例外——它将用户保存到数据库中,而无需先检查它们是否存在。在保存之前如何检查以确保用户存在?

用户控制器:

class UsersController < ApplicationController
  def new
    @user = User.new
  end

  def create 
    @user = User.new(user_params)
    if @user.exists?(:username) == false && @user.save(user_params)
      session[:id] = @user.id
      redirect_to posts_path
    else
      redirect_to '/signup'
    end
  end

  def edit

  end

  def update
  end

  def show
  end

  def destroy
  end

    private

  def user_params
    params.require(:user).permit(:username, :jabber_id, :password)
  end
end

标签: ruby-on-railsrubyruby-on-rails-5

解决方案


一个非常简单的验证将是这样的:

# in your user.rb
validates :username, uniqueness: true

您可能想忽略大小写:

# in your user.rb
validates :username, uniqueness: { case_sensitive: false }

并将您的create方法更改为如下所示:

def create 
  @user = User.new(user_params)

  if @user.save 
    session[:id] = @user.id
    redirect_to posts_path
  else
    render :new
  end
end

此外,我建议在数据库级别也有一个唯一索引:

# in a migration
add_index :users, :username, unique: true

推荐阅读