在rails教程第9章中找不到id = edit的用户

我是铁杆新手。 我正在关注Michael Hartl的铁路教程书。 在第9章中,当我尝试编辑用户配置文件时,它将无法工作。 / user / 4 / edit呈现编辑页面但是当我单击应该呈现编辑页面的用户配置文件中的设置时,它将被路由到/ user // edit并显示以下错误:

UsersController#show中的ActiveRecord :: RecordNotFound无法找到id = edit的用户

我知道这将是一个小错误,但我无法弄明白。 所以,谢谢你提前帮助。

这是我的文件

users_controller.rb

class UsersController < ApplicationController def show @user = User.find(params[:id]) end def new @user=User.new end def create @user = User.new(params[:user]) if @user.save sign_in @user flash[:success] = "Welcome!" 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 end 

_header.html.erb

  

sessions_helper.rb

 module SessionsHelper def sign_in(user) cookies.permanent[:remember_token] = user.remember_token self.current_user = user end def signed_in? !current_user.nil? end def current_user=(user) @current_user = user end def current_user @current_user ||= User.find_by_remember_token(cookies[:remember_token]) end def sign_out self.current_user = nil cookies.delete(:remember_token) end end 

edit.html.erb

  

Update your profile

的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', via: [:get, :post] match '/signin', to: 'sessions#new', via: [:get] match '/signout', to: 'sessions#destroy', via: [:delete] match '/help', to: 'static_pages#help', via: [:get, :post] match '/contact', to: 'static_pages#contact', via: [:get, :post] match '/about', to: 'static_pages#about', via: [:get, :post] end 

sessions_controller.rb

 class SessionsController < ApplicationController def new end def create user = User.find_by_email(params[:session][:email].downcase) if user && user.authenticate(params[:session][:password]) sign_in user redirect_to user else flash.now[:error] = "Invalid email/password combination" render 'new' end end def destroy sign_out redirect_to root_path end end 

改变这个

 
  • <%= link_to "Settings", edit_user_path(@current_user) %>
  • 对此

     
  • <%= link_to "Settings", edit_user_path(current_user) %>
  • 您只能在用于呈现标头的控制器方法中使用您有权访问的变量。 您的show controller仅声明@user ,而不是@current_user ,因此在呈现标头时,创建的url对user_id没有任何内容。 如果使用current_user ,将调用SessionsHelpercurrent_user方法,将返回当前用户,并且您的url中应包含user_id

    这是Hartl教程示例应用程序的github帐户。 能够通过它并将其与您自己的代码进行比较并找到您偏离的位置可能是一种好习惯。 可能会有一些不同的东西,因为你还没有完成教程,但你已经足够了,它应该大致完全相同: https : //github.com/mhartl/sample_app