Ruby on rails RubyonRails注册页面问题(在没有提供错误的情况下抛出错误)

Ruby on rails RubyonRails注册页面问题(在没有提供错误的情况下抛出错误),ruby-on-rails,ruby,ruby-on-rails-4,Ruby On Rails,Ruby,Ruby On Rails 4,我正在尝试使用RubyonRails开发一个简单的注册页面,但是我遇到了一个问题。当用户登录时,我设置的验证错误会在不应该的时候被触发(这意味着密码不够长) 以下是一些相关代码: user_controller.rb: def create @user = User.new(user_params) respond_to do |format| if @user.save format.html { redirect_to @user, notice

我正在尝试使用RubyonRails开发一个简单的注册页面,但是我遇到了一个问题。当用户登录时,我设置的验证错误会在不应该的时候被触发(这意味着密码不够长)

以下是一些相关代码:

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
当我尝试创建新用户时,路由将从注册更改为用户。但是,未创建用户,错误如下:

表单包含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)

我不知道为什么密码和密码确认是“未承诺的”。有什么想法吗

打印您传递给User.new()的内容。如果未传入密码,请检查您是否已在强参数中明确允许该密码。ie)参数要求(:用户)。允许(:名称,:电子邮件,:密码)

确保您使用的是Desive最新版本,并查看

添加到应用程序控制器中

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

如果不起作用,请告诉我…

张贴控制器代码的其余部分。这就是问题所在。您正在使用强参数,因此不需要过滤掉密码和密码确认参数。或者,您可以使用
@user.password=params[:user][:password]
@user.password\u confirmation=params[:user][:password\u confirmation]
之后和
之前,如果@user.save
。更多。。。具体来说,您的问题出现在
def user_params
中的控制器末端。您是对的,我在这里没有允许它们:您解决了吗?我的方法也是你的params-method。它不起作用。我仍然看到同样的信息
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