nil:NilClass - Ruby 在 Rails 上的未定义方法“错误”
undefined method `errors' for nil:NilClass - Ruby on Rails
我是 Rails 上 Ruby 的新手。我试图在注册时显示一条消息。请检查我的控制器并查看代码 -
users_controller.rb
class UsersController < ApplicationController
#before_action :set_user, only: [:show, :edit, :update, :destroy, :success]
def login
render layout: false
end
def register
render layout: false
@user = User.new
end
def create_register
@user = User.new(create_user_params)
#raise @user.inspect
respond_to do |format|
if @user.save
format.html { redirect_to @users, notice: 'Registration was successfully created.' }
format.json { render :success, status: :created, location: @users }
else
format.html { render :register }
format.json { render json: @ruby_win_source.errors, status: :unprocessable_entity }
end
end
end
def success
raise @user.inspect
end
private
# Use callbacks to share common setup or constraints between actions.
def set_user
@user = User.find(params[:id])
end
# Never trust parameters from the scary internet, only allow the white list through.
def user_params
params.require(:user).permit(:name, :username, :email, :password, :image, :dob, :photo, :address)
end
end
register.html.erb
<%= form_tag(@user) do |f| %>
<% if @user.errors.any? %>
<div id="error_explanation">
<h2><%= pluralize(@user.errors.count, "error") %> prohibited this user from being saved:</h2>
<ul>
<% @user.errors.full_messages.each do |message| %>
<li><%= message %></li>
<% end %>
</ul>
</div>
<% end %>
routes.rb
get 'register' => 'users#register'
post 'register' => 'users#create_register'
URL - http://localhost:3000/register
我在加载此页面时收到此错误消息 -
我在 google 中搜索并得到一些相同的问题 link。按照步骤操作,但我的问题仍未解决。请帮助我:(
在 create_register 方法中创建一个新用户调用
@user = User.new(create_user_params)
但是你的强参数方法被命名为 user_params。尝试将上面的行更改为
@user = User.new(user_params)
你注册方法中的两行是颠倒的。试试这个:
def register
@user = User.new
render layout: false
end
您正在尝试 运行 方法 errors
上的 nil class。执行 Rails 时非常常见的问题。这一行
<%= form_tag(@user) do |f| %>
<% if @user.errors.any? %>
正在寻找 @user
对象。您确实尝试在这里声明一个:
def register
render layout: false
@user = User.new
end
但根据错误,我假设它失败了。没有看到用户的迁移 table 我猜你没有创建一个?要为活动记录 class 创建新的 User
对象,您需要 运行 对数据库进行迁移,以便 table 可以使用。
http://guides.rubyonrails.org/active_record_migrations.html
我这里也没有看到模型。给用户 User.new
你还需要一个模型。
http://guides.rubyonrails.org/active_record_basics.html
现在有另一种工具可以让您在 Rails 中工作变得更加轻松。
有史以来最酷的工具。只需安装 pry gem,require pry
并在代码中需要 pry 的地方放置一个带有 binding.pry
的换行符,您就可以直接玩了与代码。对于这种情况,我会这样做。
def register
render layout: false
require `pry`; binding.pry;
@user = User.new
end
然后转到您正在 运行 连接您的服务器的终端,您就在代码中。然后尝试代码的失败部分。 @user = User.new
它将为您提供更具启发性的错误消息。
我是 Rails 上 Ruby 的新手。我试图在注册时显示一条消息。请检查我的控制器并查看代码 -
users_controller.rb
class UsersController < ApplicationController
#before_action :set_user, only: [:show, :edit, :update, :destroy, :success]
def login
render layout: false
end
def register
render layout: false
@user = User.new
end
def create_register
@user = User.new(create_user_params)
#raise @user.inspect
respond_to do |format|
if @user.save
format.html { redirect_to @users, notice: 'Registration was successfully created.' }
format.json { render :success, status: :created, location: @users }
else
format.html { render :register }
format.json { render json: @ruby_win_source.errors, status: :unprocessable_entity }
end
end
end
def success
raise @user.inspect
end
private
# Use callbacks to share common setup or constraints between actions.
def set_user
@user = User.find(params[:id])
end
# Never trust parameters from the scary internet, only allow the white list through.
def user_params
params.require(:user).permit(:name, :username, :email, :password, :image, :dob, :photo, :address)
end
end
register.html.erb
<%= form_tag(@user) do |f| %>
<% if @user.errors.any? %>
<div id="error_explanation">
<h2><%= pluralize(@user.errors.count, "error") %> prohibited this user from being saved:</h2>
<ul>
<% @user.errors.full_messages.each do |message| %>
<li><%= message %></li>
<% end %>
</ul>
</div>
<% end %>
routes.rb
get 'register' => 'users#register'
post 'register' => 'users#create_register'
URL - http://localhost:3000/register
我在加载此页面时收到此错误消息 -
我在 google 中搜索并得到一些相同的问题 link。按照步骤操作,但我的问题仍未解决。请帮助我:(
在 create_register 方法中创建一个新用户调用
@user = User.new(create_user_params)
但是你的强参数方法被命名为 user_params。尝试将上面的行更改为
@user = User.new(user_params)
你注册方法中的两行是颠倒的。试试这个:
def register
@user = User.new
render layout: false
end
您正在尝试 运行 方法 errors
上的 nil class。执行 Rails 时非常常见的问题。这一行
<%= form_tag(@user) do |f| %>
<% if @user.errors.any? %>
正在寻找 @user
对象。您确实尝试在这里声明一个:
def register
render layout: false
@user = User.new
end
但根据错误,我假设它失败了。没有看到用户的迁移 table 我猜你没有创建一个?要为活动记录 class 创建新的 User
对象,您需要 运行 对数据库进行迁移,以便 table 可以使用。
http://guides.rubyonrails.org/active_record_migrations.html
我这里也没有看到模型。给用户 User.new
你还需要一个模型。
http://guides.rubyonrails.org/active_record_basics.html
现在有另一种工具可以让您在 Rails 中工作变得更加轻松。
有史以来最酷的工具。只需安装 pry gem,require pry
并在代码中需要 pry 的地方放置一个带有 binding.pry
的换行符,您就可以直接玩了与代码。对于这种情况,我会这样做。
def register
render layout: false
require `pry`; binding.pry;
@user = User.new
end
然后转到您正在 运行 连接您的服务器的终端,您就在代码中。然后尝试代码的失败部分。 @user = User.new
它将为您提供更具启发性的错误消息。