Ruby on rails 为什么我的Rails应用程序返回“密码太短(至少6个字符)”,而我的字符数是正确的?

Ruby on rails 为什么我的Rails应用程序返回“密码太短(至少6个字符)”,而我的字符数是正确的?,ruby-on-rails,reactjs,fetch,bcrypt-ruby,Ruby On Rails,Reactjs,Fetch,Bcrypt Ruby,我正在建立一个简单的注册页面 以下是我的用户模型及其验证和关联: class User < ApplicationRecord has_secure_password has_many :posts has_many :comments has_many :likes validates :username, presence: true, uniqueness: true validates :password, presence: t

我正在建立一个简单的注册页面

以下是我的用户模型及其验证和关联:

class User < ApplicationRecord
    has_secure_password

    has_many :posts
    has_many :comments
    has_many :likes

    validates :username, presence: true, uniqueness: true
    validates :password, presence: true, length: { minimum: 6 }
end
我通过fetch发送参数,以下是参数:

<ActionController::Parameters {"name"=>"Test Name User", "title"=>"Test Title User", "username"=>"test_username_user", "password"=>"password123", "controller"=>"users", "action"=>"create", "user"=>{"name"=>"Test Name User", "username"=>"test_username_user", "title"=>"Test Title User"}} permitted: false>

我的密码验证不起作用,尽管我传递了正确数量的字符。

您正在传递给User.new,只是[:password]而不是params[:password]

它最常用于仅向私有函数传递参数,如下所示:

private

def user_params
   params.require(:user).permit(:name, :title, :username, :password)
end
然后在创建方法中:

def create
    @user = User.new(name: params[:name], title: params[:title], username: params[:username], password: [:password])

    if @user.valid?
        @user.save
        render json: { status: 200, user: @user }
    else
        render json: { status: 401, message: @user.errors.full_messages }
    end
end
@user = User.new(user_params)
更新

您可以直接检查用户是否已保存,而不是询问用户是否有效

if @user.save
  # your code for success
else
  # your code for failure
end

您正在向User.new传递的是[:password],而不是params[:password]

它最常用于仅向私有函数传递参数,如下所示:

private

def user_params
   params.require(:user).permit(:name, :title, :username, :password)
end
然后在创建方法中:

def create
    @user = User.new(name: params[:name], title: params[:title], username: params[:username], password: [:password])

    if @user.valid?
        @user.save
        render json: { status: 200, user: @user }
    else
        render json: { status: 401, message: @user.errors.full_messages }
    end
end
@user = User.new(user_params)
更新

您可以直接检查用户是否已保存,而不是询问用户是否有效

if @user.save
  # your code for success
else
  # your code for failure
end
您的密码缺少参数[:password]

因为它与任何密码都不匹配,所以它是空的,少于6个字符。

您的密码缺少参数[:password]

因为它与任何密码都不匹配,所以它是空的,少于6个字符