【发布时间】:2018-05-20 08:34:56
【问题描述】:
在为 Ruby on Rails 应用程序实现我认为是简单的signup/login 系统时,结果与教程显示的不符。
我正在尝试使用 bcrypt 进行身份验证,使用 PostgreSQL 进行数据库。
我不断收到'ActionController::ParameterMissing (param is missing or the value is empty: name):',即使它会显示名称作为输入。 '"users"=>{"name"=>"asdf", "password"=>"Qq!1asdfasdf", "password_confirmation"=>"Qq!1asdfasdf"}, "commit"=>"Submit"} (0.1ms)
output from the console when attempting to sign in
用户控制器
class UsersController < ApplicationController
def new
end
def create
user = User.new(
name: params[:name],
password: params[:password],
password_confirmation: params[:password_confirmation])
if user.save
session[:user_id] = user.id
redirect_to '/'
else
redirect_to '/signup'
end
end
private
end
桌子
class UsersController < ApplicationController
def new
end
def create
user = User.new(
name: params[:name],
password: params[:password],
password_confirmation: params[:password_confirmation])
if user.save
session[:user_id] = user.id
redirect_to '/'
else
redirect_to '/signup'
end
end
private
end
和注册表单
class UsersController < ApplicationController
def new
end
def create
user = User.new(
name: params[:name],
password: params[:password],
password_confirmation: params[:password_confirmation])
if user.save
session[:user_id] = user.id
redirect_to '/'
else
redirect_to '/signup'
end
end
private
end
用户模型
class User < ActiveRecord::Base
PASSWORD_FORMAT = /\A
(?=.{10,}) # Must contain 10 or more characters
(?=.*\d) # Must contain a digit
(?=.*[a-z]) # Must contain a lower case character
(?=.*[A-Z]) # Must contain an upper case character
(?=.*[[:^alnum:]]) # Must contain a symbol
/x
#formatting for password
USERNAME_FORMAT = /\A[a-z0-9A-Z\-_]{2,15}\z/ #Can contain lowercase and upercase letters, numbers, - and _, must be between 2 and 15 length
#username formatting
validates :name,
:presence => true,
:uniqueness => true,
:format => USERNAME_FORMAT
validates :password,
:presence => true,
:format => PASSWORD_FORMAT,
:confirmation => true,
:on => create
has_secure_password
end
我试过troubleshooting,所有类似的问题都没有得到答案或修复。
编辑:更明确的问题
【问题讨论】:
-
在
create中的redirect_to '/signup'之前添加puts user.errors.full_messages。查看它在终端中的打印内容。它会告诉你为什么记录没有持久化。 -
ActionController::ParameterMissing(参数缺失或值为空:名称):app/controllers/users_controller.rb:20:in
user_params' app/controllers/users_controller.rb:7:increate' -
因此,这意味着您为
name传递的值根据验证为空/无效。 -
有建议的修复方法吗?输入不是无效的,我不知道该怎么做。
-
根据您的日志,您将此名称发送给控制器:
"name"=>"Qq!1asdfasdf"。但是您对名称进行了正则表达式验证,并且“Qq!1asdfasdf”没有通过USERNAME_FORMAT。尝试使用其他名称,我认为它应该可以工作。
标签: ruby-on-rails ruby postgresql bcrypt