我正在尝试使用Ruby on Rails处理一个简单的注册页面,但是我遇到了一个问题。当用户登录时,我设置的验证错误将在不应该被触发时触发(它说密码不够长)。
以下是一些相关代码:
user_controller.rb:
def create
@user = User.new(user_params)
respond_to do |format|
if @user.save
format.html { redirect_to @user, notice: 'User was successfully created.' }
format.json { render :show, status: :created, location: @user }
else
format.html { render :new }
format.json { render json: @user.errors, status: :unprocessable_entity }
end
end
end
User.rb型号:
class User < ActiveRecord::Base
#attr_accessor :name, :email, :password_digest
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,
format: { with: VALID_EMAIL_REGEX },
uniqueness: { case_sensitive: false }
has_secure_password
validates :password, length: { minimum: 6 }
has_many :microposts
end
new.html.slim视图:
- provide(:title, 'Sign up')
h1 Sign up
.row
.col-md-6.col-md-offset-3
= form_for(@user) do |f|
= render 'shared/error_messages'
= f.label :name
= f.text_field :name, class: 'form-control'
= f.label :email
= f.text_field :email, class: 'form-control'
= f.label :password
= f.password_field :password, class: 'form-control'
= f.label :password_confirmation, "Confirmation"
= f.password_field :password_confirmation, class: 'form-control'
= f.submit "Create my account", class: "btn btn-primary"
当我尝试创建新用户时,路由会从注册更改为用户。但是,未创建用户,错误包括:
表单包含2个错误。 密码不能为空 密码太短(最少6个字符)
但是,输入了密码。你看到任何会导致这种情况的东西吗?谢谢。
编辑:
尝试在注册页面上创建用户时,这是控制台输出:
Started POST "/users" for 127.0.0.1 at 2014-11-07 15:02:51 -0800
Processing by UsersController#create as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"DP7+I+/MRBidFqmoav2E8bUAxt+f5kSfPaRPkcEehLE=", "user"=>{"name"=>"Joe Bob", "email"=>"bob@gmail.com", "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]"}, "commit"=>"Create my account"}
Unpermitted parameters: password, password_confirmation
(0.1ms) BEGIN
User Exists (1.6ms) SELECT 1 AS one FROM `users` WHERE `users`.`email` = 'msutyak@gmail.com' LIMIT 1
(0.1ms) ROLLBACK
Rendered shared/_error_messages.html.slim (1.1ms)
Rendered users/new.html.slim within layouts/application (3.3ms)
Rendered layouts/_header.html.erb (0.2ms)
Rendered layouts/_footer.html.erb (0.1ms)
Completed 200 OK in 34ms (Views: 13.3ms | ActiveRecord: 1.9ms)
我不确定为什么密码和password_confirmation是“不准备”的。有任何想法吗?
答案 0 :(得分:1)
打印出你传递给User.new()的内容。如果未传入密码,请检查是否已在强参数中明确允许密码。 ie)params.require(:user).permit(:name,:email,:password)
答案 1 :(得分:1)
确保您使用的是Devise最新版本,并查看DeviseStrongParameters
添加到您的应用程序控制器
before_filter :add_sanitized_params, if: :devise_controller?
def add_sanitized_params
devise_parameter_sanitizer.for(:sign_up) {|u| u.permit(:password, :password_confirmation)}
end
如果不起作用,请告诉我......