虽然我填写姓名,电子邮件,密码,验证块注册

问题描述 投票:0回答:1

我在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: [email protected]
    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"=>"[email protected]", "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.saveif @user.save!

另一个错误信息

验证失败:名称不能为空,电子邮件地址不能为空,电子邮件是无效的,密码不能为空

ruby-on-rails railstutorial.org
1个回答
1
投票

看看创建行动。你有@user = User.new(params[:user_params])。但在PARAMS没有user_params关键。 user_params是一个方法的名称,你拥有了它在控制器的私处,并且定义在这个方法中强参数。只是改变

@user = User.new(user_params)
© www.soinside.com 2019 - 2024. All rights reserved.