我在以下代码中获得了NoMethodError in Users#show undefined method 'name' for nil:NilClass
。
显示视图:
<% provide(:title, @user.name) %>
<div class="row">
...
用户控制器:
class UsersController < ApplicationController
def new
@user = User.new
render :layout => false
end
def create
@user = User.new(user_params)
if @user.save
flash[:success] = "Welcome to the BluePlaque Explorer!"
redirect_to @user
else
render 'new'
end
end
def show
@user = User.find(params[:id])
end
private
def user_params
params.require(:user).permit(:first_name, :last_name, :email, :password,
:password_confirmation)
end
def login
render :layout => false
end
end
show show在成功注册后显示用户个人资料页面的内容。看不出是什么导致它。
答案 0 :(得分:1)
用户#中的NoMethodError显示未定义的方法&#39; name&#39;为零:NilClass
除了您的.name
模型没有User
方法这一明显事实外,此错误突出显示了另一个问题......您的@user
变量没有设定。
Rails
/ Ruby
无法处理&#34;未声明的&#34;预期方式的变量;它将它们分配给nil:NilClass
- 它会让开发人员的思想变得混乱,因为他们认为方法是错误的,当真的,缺少{{1}时调用方法。
底线是您需要以下内容:
@object
这将设置您的#app/controllers/users_controller.rb
class UsersController < ApplicationController
def show
@user = User.find params[:id]
end
end
变量,您可以使用该变量调用@user
或其他任何内容:
.name
-
现在......给你一个很酷的伎俩:
#app/views/users/show.html.erb
<%= @user.first_name %>
如果 #app/models/user.rb
class User < ActiveRecord::Base
def name
first_name + " " + last_name
end
end
已设置,您可以拨打@user.name
!
答案 1 :(得分:0)
如果不确定presense
,您始终可以使用try
<% provide(:title, @user.try(:name)) %>