我在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.save
到if @user.save!
另一个错误信息
验证失败:名称不能为空,电子邮件地址不能为空,电子邮件是无效的,密码不能为空
看看创建行动。你有@user = User.new(params[:user_params])
。但在PARAMS没有user_params
关键。 user_params
是一个方法的名称,你拥有了它在控制器的私处,并且定义在这个方法中强参数。只是改变
@user = User.new(user_params)