即使我填写了姓名、电子邮件、密码,验证也会阻止注册

Even though I filled in name, email, password, validation blocks signup

我正在学习 Rails 教程。我以为我差不多完成了第 7 章,但是当我尝试从浏览器注册我所做的内容时,它没有通过验证。你能告诉我为什么以及发生了什么事吗?

我试着在这里查看示例代码。 https://github.com/yasslab/sample_apps/tree/master/5_1_2/ch07, 但我找不到任何解决此错误的方法。

这出现在头像上。

--- !ruby/object:ActionController::Parameters
parameters: !ruby/hash:ActiveSupport::HashWithIndifferentAccess
  utf8: "✓"
  authenticity_token: uXdA0mb2W613nUOFg8K47fR9pvmwv69wxwByuzE+DF9SbMhQIPsuLEGsZyax9tmDJAyw4x9ektFwqcQ0dVqvgw==
  user: !ruby/hash:ActiveSupport::HashWithIndifferentAccess
    name: Rails Tutorial
    email: example@railstutorial.org
    password: pokopoko
    password_confirmation: pokopoko
  commit: Create my account
  controller: users
  action: create
permitted: false

# users_controller.rb
class UsersController < ApplicationController      
  def show
    @user = User.find(params[:id])
  end

  def new
    @user = User.new
  end

  def create
   @user = User.new(params[:user_params])
    if @user.save
      flash[:success] = "Welcome to the Sample App!"
      redirect_to @user
    else
      render 'new'
    end
  end

  private

  def user_params
    params.require(:user).permit(:name, :email, :password, :password_confirmation)
  end
end

# user.rb
class User < ApplicationRecord
  validates :name,  presence: true, length: { maximum:  50 }
  VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i
  validates :email, presence: true, length: { maximum: 255 },
                    format: { with: VALID_EMAIL_REGEX },
                    uniqueness: { case_sensitive: false }
  has_secure_password
  validates :password, presence: true, length: { minimum: 6 }, allow_nil: true
end

错误日志是这样的。

Started POST "/signup" for 160.86.161.32 at 2019-02-05 02:14:40 +0000
Cannot render console from 160.86.161.32! Allowed networks: 127.0.0.1, ::1, 127.0.0.0/127.255.255.255
Processing by UsersController#create as HTML
  Parameters: {"utf8"=>"✓", "authenticity_token"=>"uXdA0mb2W613nUOFg8K47fR9pvmwv69wxwByuzE+DF9SbMhQIPsuLEGsZyax9tmDJAyw4x9ektFwqcQ0dVqvgw==", "user"=>{"name"=>"Rails Tutorial", "email"=>"example@railstutorial.org", "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]"}, "commit"=>"Create my account"}
   (0.1ms)  begin transaction
  User Exists (0.1ms)  SELECT  1 AS one FROM "users" WHERE "users"."email" IS NULL LIMIT ?  [["LIMIT", 1]]
   (0.1ms)  rollback transaction
  Rendering users/new.html.erb within layouts/application
  Rendered shared/_error_messages.html.erb (1.1ms)
  Rendered users/new.html.erb within layouts/application (4.1ms)
  Rendered layouts/_shim.html.erb (0.3ms)
  Rendered layouts/_header.html.erb (0.5ms)
  Rendered layouts/_footer.html.erb (0.4ms)
Completed 200 OK in 44ms (Views: 39.2ms | ActiveRecord: 0.3ms)

如果我将 if @user.save 更改为 if @user.save!

另一个错误消息

验证失败:姓名不能为空,邮箱不能为空,邮箱无效,密码不能为空

查看创建操作。你有 @user = User.new(params[:user_params])。但是参数中没有 user_params 键。 user_params 是一个方法名,你在controller的私有部分有它,你在这个方法中定义了强参数。只需更改为

@user = User.new(user_params)