即使我填写了姓名、电子邮件、密码,验证也会阻止注册
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)
我正在学习 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)