【问题标题】:Trying to prevent duplicate username creation in Sinatra app试图防止在 Sinatra 应用程序中创建重复的用户名
【发布时间】:2020-07-04 15:37:12
【问题描述】:

您好,我正在尝试防止创建重复的用户名,并且我的应用程序不断尝试将我重定向到假设的帐户页面,并在我的 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

这是我的用户控制器发布方法,它应该创建或重定向回注册页面并给出用户名已经存在的闪烁消息

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

当我尝试创建一个重复的用户名以进行测试时....它不断将我重定向到一个帐户页面,但抛出一个错误,即用户名未从 erb 文件中定义。但是,在创建全新的用户名时它可以正常工作。我做错了什么?

【问题讨论】:

    标签: ruby sinatra


    【解决方案1】:

    “从 erb 引发错误”听起来像是某处的 ERB 文件中存在问题?

    User.create 可能在唯一性检查触发时静默失败,即听起来像是将@user.username 设置为nil,或者@user 本身就是nil

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

    你可以:

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

    【讨论】:

    • 我将不得不克隆它并尝试这种方法。
    猜你喜欢
    • 1970-01-01
    • 2017-04-14
    • 2018-10-08
    • 1970-01-01
    • 1970-01-01
    • 2012-03-24
    • 2015-04-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多