i_t*_*ope 8 ruby-on-rails railstutorial.org
我正在关注Michael Hartl的Rails指南(第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
Run Code Online (Sandbox Code Playgroud)
这是我的users_controller.rb
class UsersController < ApplicationController
before_action :signed_in_user, only: [:edit, :update]
def show
@user = User.find(params[:id])
end
def new
@user = User.new
end
def create
@user = User.new(params[:user]) # Not the final implementation!
if @user.save
sign_in @user
flash[:success] = "Welcome to the Sample App!"
redirect_to @user
else
render 'new'
end
end
def edit
@user = User.find(params[:id])
end
def update
@user = User.find(params[:id])
if @user.update_attributes(params[:user])
flash[:success] = "Profile updated"
sign_in @user
redirect_to @user
else
render 'edit'
end
end
def destroy
User.find(params[:id]).destroy
flash[:success] = "User destroyed."
redirect_to users_url
end
private
def user_params
params.require(:user).permit(:name, :email, :password, :password_confirmation)
end
# Before filters
def signed_in_user
unless signed_in?
store_location
redirect_to signin_url, notice: "Please sign in."
end
end
end
Run Code Online (Sandbox Code Playgroud)
页面加载正常没有行:
before_action :signed_in_user, only: [:edit, :update]
Run Code Online (Sandbox Code Playgroud)
但随着它的包含,事情出错了,我无法弄清楚为什么.
此外,这是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
Run Code Online (Sandbox Code Playgroud)
任何帮助表示赞赏!
frb*_*rbl 18
如果确实Hurman的答案解决了您的问题,原因是因为您运行的是旧版本(即<4.0.0)的rails.before_filter在此版本中重命名为before_action(https://github.com/rails/rails/commit/9d62e04838f01f5589fa50b0baa480d60c815e2c),Rails 4中的更多信息:before_filter vs. before_action
小智 16
而不是在Users_controller中的Before Action尝试过滤之前所以你的代码如下所示:
before_filter :signed_in_user, only: [:edit, :update]
Run Code Online (Sandbox Code Playgroud)
我有完全相同的错误!
| 归档时间: |
|
| 查看次数: |
21122 次 |
| 最近记录: |