Ruby 正在尝试防止在Sinatra应用程序中创建重复的用户名

Ruby 正在尝试防止在Sinatra应用程序中创建重复的用户名,ruby,sinatra,Ruby,Sinatra,您好,我正在尝试防止重复的用户名创建,我的应用程序一直试图将我重定向到一个假设的帐户页面,并在我的erb文件中不断抛出用户名未定义错误,如果用户名已经存在,我实际上正在尝试重定向回注册页面 以下是我的用户类模型: class User <ActiveRecord::Base include Slugifiable::InstanceMethods extend Slugifiable::ClassMethods validates_uniqueness_o

您好,我正在尝试防止重复的用户名创建,我的应用程序一直试图将我重定向到一个假设的帐户页面,并在我的erb文件中不断抛出用户名未定义错误,如果用户名已经存在,我实际上正在尝试重定向回注册页面

以下是我的用户类模型:

class User <ActiveRecord::Base
    include Slugifiable::InstanceMethods
    extend Slugifiable::ClassMethods
    
    validates_uniqueness_of :username, case_sensitive: false <---This should validate if username exist
    has_many :players

    has_secure_password
    
    
  


end
class用户参数[:username],:email=>params[:email],:password=>
params[:password],:name=>params[:name])
会话[:user\u id]=@user.id
重定向到“/帐户”
结束
结束
结束
当我试图创建一个重复的用户名进行测试时……它会不断地将我重定向到一个帐户页面,但会抛出一个错误,即erb文件中没有定义用户名。但是,当创建一个全新的用户名时,它工作得很好。我做错了什么?

“从erb引发错误”听起来好像erb文件中的某个地方有问题

User.create
在触发唯一性检查时可能会自动失败,即听起来好像它将
@User.username
设置为
nil
,或者
@User
本身是
nil

您也从未定义当验证检查失败时它应该做什么

你可以:

  • 使用
    User.create
    以引发异常
  • 检查
    @user.valid?
    @user.errors
    是否有任何错误,并向用户报告
“从erb引发错误”听起来好像erb文件中的某个地方有问题

User.create
在触发唯一性检查时可能会自动失败,即听起来好像它将
@User.username
设置为
nil
,或者
@User
本身是
nil

您也从未定义当验证检查失败时它应该做什么

你可以:

  • 使用
    User.create
    以引发异常
  • 检查
    @user.valid?
    @user.errors
    是否有任何错误,并向用户报告

我必须克隆它并尝试此方法。我必须克隆它并尝试此方法。
post '/signup' do
        if params[:username] == "" || params[:email] == "" || params[:password] == "" || params[:name] == ""
            flash[:notice] = "<h3 class ='alert'>Please fill-in info!</h3>"
            redirect to '/signup'
        
        
        else
            if @user
              flash[:notice] = "<h3>Username already exist, try anoter one.</h3>"
              redirect to '/signup'
            else
              @user = User.create(:username => params[:username], :email => params[:email], :password => 
 params[:password], :name => params[:name])
              session[:user_id] = @user.id
              redirect to '/account'
            
            end
        end
    end