Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails ActiveRecord::RecordNotFound-无法';找不到没有ID的用户_Ruby On Rails_Ruby On Rails 3_Ruby On Rails 3.1 - Fatal编程技术网

Ruby on rails ActiveRecord::RecordNotFound-无法';找不到没有ID的用户

Ruby on rails ActiveRecord::RecordNotFound-无法';找不到没有ID的用户,ruby-on-rails,ruby-on-rails-3,ruby-on-rails-3.1,Ruby On Rails,Ruby On Rails 3,Ruby On Rails 3.1,遵循Hartl的Rails教程(3.2)。我一直收到此错误消息或奇怪的“连接已重置”消息: 我正在尝试登录,成功登录后,我希望应用程序将用户重定向到user/show.html.erb。我相信我正在用户控制器的show方法中传递:id参数。任何提示/帮助都将不胜感激 我在下面粘贴了一些相关文件。如果你们还需要别的东西,请告诉我 会话\u controller.rb class SessionsController < ApplicationController def new @ti

遵循Hartl的Rails教程(3.2)。我一直收到此错误消息或奇怪的“连接已重置”消息:

我正在尝试登录,成功登录后,我希望应用程序将用户重定向到user/show.html.erb。我相信我正在用户控制器的show方法中传递:id参数。任何提示/帮助都将不胜感激

我在下面粘贴了一些相关文件。如果你们还需要别的东西,请告诉我

会话\u 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
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
编辑:已添加会话\u 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 in会话控制器中,您没有传递任何id。如果您有会话用户id,请将其传递

代码可以是

redirect_to 'user/show' , :id => session[:user_id]
redirect_to user_url(:session[:user_id])
你能检查一下当前的用户是谁吗。与渲染类似

render:text=>current_user.inspect并返回false
之前的会话控制器

redirect_to user_url(:session[:user_id])

。如果它没有出现,您的身份验证就会出现问题

我认为在def create in会话控制器中,您没有传递任何id。如果您有会话用户id,请将其传递

代码可以是

redirect_to 'user/show' , :id => session[:user_id]
redirect_to user_url(:session[:user_id])
你能检查一下当前的用户是谁吗。与渲染类似

render:text=>current_user.inspect并返回false
之前的会话控制器

redirect_to user_url(:session[:user_id])

。如果它没有出现,您的身份验证就会出现问题

在您的情况下,当前用户似乎是
nil
。让我们看看您的用户控制器显示操作。它正在尝试查找id=
params[:id]
的用户记录,如果您的url为users/show,则不会设置该记录。Find ActiveRecords
Find
方法期望找到一条记录,如果没有,则抛出错误


尝试找出当前用户评估为零的原因。可能是您没有登录,或者您的实现中存在错误。

在您的情况下,当前用户似乎是
nil
。让我们看看您的用户控制器显示操作。它正在尝试查找id=
params[:id]
的用户记录,如果您的url为users/show,则不会设置该记录。Find ActiveRecords
Find
方法期望找到一条记录,如果没有,则抛出错误


尝试找出当前用户评估为零的原因。可能是您没有登录,或者您的实现中存在错误。

我尝试了上面的代码,但仍然收到相同的错误。正如iltempo所指出的,我的实现中可能存在问题。我添加了会话助手。我尝试了上面的代码,但仍然收到相同的错误。正如iltempo所指出的,我的实现中可能存在问题。我添加了会话助手。另外,您是否介意详细解释一下,如果我的url为users/show,为什么不会设置id=params[:id]?我尝试添加重定向和传递id
:id=>会话[:user\u id]
,但仍然有相同的错误。另外,您是否介意详细说明如果我的url为users/show,为什么不会设置id=params[:id]?我已尝试添加重定向和传递id
:id=>会话[:user\u id]
,但仍然有相同的错误。