没有方法错误

时间:2015-10-22 22:38:10

标签: ruby-on-rails model-view-controller methods view

我在以下代码中获得了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在成功注册后显示用户个人资料页面的内容。看不出是什么导致它。

2 个答案:

答案 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)) %>