ActiveRecord::RecordNotFound - 找不到没有 ID 的用户 [英] ActiveRecord::RecordNotFound - Couldn't find User without an ID
问题描述
遵循 Hartl 的 Rails RailTutorial for Rails(3.2).我不断收到此错误消息或奇怪的连接已重置"消息:
Following Hartl's RailTutorial for Rails(3.2). I keep getting this error message or oddly a "The connection was reset" message:
ActiveRecord::RecordNotFound in UsersController#show
Couldn't find User without an ID
我正在尝试登录,成功登录后,我希望应用程序将用户重定向到 user/show.html.erb.我相信我在用户控制器的 show 方法中传递了 :id 参数.任何提示/帮助将不胜感激!
I'm trying to log in and after successfully logging in, I want the application to redirect the user to user/show.html.erb. I believe that I'm passing the :id parameter in the show method in the users controller. Any tip/help would be appreciated!
我在下面粘贴了一些相关文件.如果你们还有什么需要,请告诉我.
I've pasted some relevant files below. Let me know if you guys need anything else.
sessions_controller.rb
sessions_controller.rb
class SessionsController < ApplicationController
def new
@title = "Log in"
end
def create
user = User.find_by_email(params[:session][:email])
if user.nil?
flash.now[:error] = "Invalid email/password combination."
@title = "Sign in"
render 'new'
else
flash.now[:success] = "Successful login!"
sign_in user
redirect_to 'users/show'
end
end
def destroy
sign_out
redirect_to root_path[:name]
end
end
users_controller.rb
users_controller.rb
class UsersController < ApplicationController
def new
@user = User.new
@title = "Sign up"
end
def show
if params[:id].nil? && current_user
@user = current_user
else
@user = User.find(params[:id])
end
@title = @user.name
end
def create
@user = User.new(params[:user])
if @user.save
sign_in @user
flash[:success] = "Account created!"
redirect_to @user
else
@title = "Sign up"
render 'new'
end
end
def destroy
@user.destroy
redirect_to users_path, :flash => { :success => "User destroyed." }
end
end
routes.rb
SampleApp::Application.routes.draw do
resources :users
resources :sessions, :only => [:new, :create, :destroy]
match '/sessions', :to => 'users#show'
match '/signup', :to => 'users#new'
match '/login', :to => 'sessions#new'
match '/logout', :to => 'sessions#destroy'
root :to => 'pages#home'
添加了sessions_helper.rb
Added sessions_helper.rb
module SessionsHelper
def sign_in(user)
cookies.permanent.signed[:remember_token] = user.remember_token
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_from_remember_token
end
def sign_out
cookies.delete(:remember_token)
current_user = nil
end
private
def user_from_remember_token
remember_token = cookies[:remember_token]
User.find_by_remember_token(remember_token) unless remember_token.nil?
end
end
推荐答案
我认为在会话控制器中的 def create 中您没有传递任何 id .如果您有会话用户 ID,请传递它
I think in the def create in session controller you have not passed any id . If you have session user id please pass with it
代码可以
redirect_to 'user/show' , :id => session[:user_id]
redirect_to user_url(:session[:user_id])
你能检查一下 current_user 吗?像
Can you please check current_user be. with rendering like
render :text =>current_user.inspect 并返回 false
在
redirect_to user_url(:session[:user_id])
.如果它没有出现,则说明您的身份验证存在问题.
. If it does not come there is a problem in your authentication .
这篇关于ActiveRecord::RecordNotFound - 找不到没有 ID 的用户的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!