Ruby on rails 用户控制器呈现错误中的before#u操作:用户中的NoMethodError#显示

Ruby on rails 用户控制器呈现错误中的before#u操作:用户中的NoMethodError#显示,ruby-on-rails,railstutorial.org,Ruby On Rails,Railstutorial.org,我遵循迈克尔·哈特尔的铁路指南(第9章)。当我尝试访问与用户配置文件对应的页面时,浏览器会显示以下错误消息: NoMethodError in Users#show Showing /home/jonathan/Desktop/railsTut/sample_app/app/views/users/show.html.erb where line #1 raised: undefined method `name' for nil:NilClass Extracted source (a

我遵循迈克尔·哈特尔的铁路指南(第9章)。当我尝试访问与用户配置文件对应的页面时,浏览器会显示以下错误消息:

 NoMethodError in Users#show

Showing /home/jonathan/Desktop/railsTut/sample_app/app/views/users/show.html.erb where line #1 raised:

undefined method `name' for nil:NilClass

Extracted source (around line #1):

1: <% provide(:title, @user.name) %>
2: <div class="row">
3:   <aside class="span4">
4:     <section>

Rails.root: /home/jonathan/Desktop/railsTut/sample_app
但由于它的包容性,事情会出错,我不知道为什么

另外,这是routes.rb

SampleApp::Application.routes.draw do
  resources :users
  resources :sessions, only: [:new, :create, :destroy]

  root to: 'static_pages#home'

 match '/signup',  to: 'users#new'
  match '/signin',  to: 'sessions#new'
  match '/signout', to: 'sessions#destroy', via: :delete

  match '/help',    to: 'static_pages#help'
  match '/about',   to: 'static_pages#about'
  match '/contact', to: 'static_pages#contact'

end

感谢您的帮助

而不是用户\u控制器中的操作前 因此,您的代码如下所示:

before_filter :signed_in_user, only: [:edit, :update]

我也犯了同样的错误

如果Hurman的答案确实解决了您的问题,原因是您运行的是一个较旧的版本(即,继@Hurman Gul的答案之后,我希望能给您一些关于为什么会看到这个问题的详细信息


您的控制器正在对不存在的变量执行操作

您出现的错误是因为您的一个操作试图对一个未设置或没有内容的变量执行操作(为零)。该错误基本上意味着您试图调用变量中不存在的“.name”部分

undefined method `name' for nil:NilClass

Extracted source (around line #1):

1: <% provide(:title, @user.name) %>
2: <div class="row">
3:   <aside class="span4">
4:     <section>

Rails.root: /home/jonathan/Desktop/railsTut/sample_app
nil:NilClass的未定义方法“name” 提取的源(第1行附近): 1: 2: 三: 4: Rails.root:/home/jonathan/Desktop/railsTut/sample\u应用程序 这基本上意味着,在您的视图中,当@user可能不存在时,您正试图加载@user.name。我建议解决此问题的方法是首先对您的视图应用一些逻辑:

#app/views/users/show.html.erb
<% unless defined?(@user) %>
    Sorry, we could not find your user!
<% else %>

 your code

<% end %>
#app/views/users/show.html.erb
很抱歉,我们找不到您的用户!
你的代码

我在使用4.1.6时遇到了同样的问题。 问题是您已经将before_action定义为
private
,我不知道为什么,但是这种可见性会干扰控制器在Rails中的before_action加载。因此,只需将
signed_in_user
带到该区域之外,它就会重新开始工作


希望这有帮助!

请发送文件,访问此页面时的url是什么。这意味着您在用户配置文件中没有用户。我刚刚在原始帖子中添加了路由文件。url为@Debadatt,很好,可能是具有此id的用户,但没有exists@Flo,我想我们的想法是访问任何用户配置文件来查看它们,而不是关于只打开你的个人资料。
undefined method `name' for nil:NilClass

Extracted source (around line #1):

1: <% provide(:title, @user.name) %>
2: <div class="row">
3:   <aside class="span4">
4:     <section>

Rails.root: /home/jonathan/Desktop/railsTut/sample_app
#app/views/users/show.html.erb
<% unless defined?(@user) %>
    Sorry, we could not find your user!
<% else %>

 your code

<% end %>