在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
,将调用SessionsHelper
的current_user
方法,将返回当前用户,并且您的url中应包含user_id
。
这是Hartl教程示例应用程序的github帐户。 能够通过它并将其与您自己的代码进行比较并找到您偏离的位置可能是一种好习惯。 可能会有一些不同的东西,因为你还没有完成教程,但你已经足够了,它应该大致完全相同: https : //github.com/mhartl/sample_app
- validation嵌套模型的存在
- 如何在Rails上实现无cookie的Flash消息?
- 获取当前页面的URL,但格式不同
- 是否值得开始学习rails 2或者我应该等到轨道3上的书籍可用吗?
- 当我使用gem’pg’运行“bundle install”时,我收到此错误。 我该怎么办?
- 您的Gemfile中出错,而Bundler无法继续
- 不可阻挡的服务器 – 铁轨
- ActionController :: RoutingError(未初始化的常量AdminsController)
- 数组中的“each”/“map”会在create_time_zone_conversion_attribute中导致“你没有想到它时有一个nil对象”,偶尔会