Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/66.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.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 检查会话_Ruby On Rails_Ruby_Ruby On Rails 3 - Fatal编程技术网

Ruby on rails 检查会话

Ruby on rails 检查会话,ruby-on-rails,ruby,ruby-on-rails-3,Ruby On Rails,Ruby,Ruby On Rails 3,在我的Rails应用程序中,如果用户试图创建一个新帐户,并且已经有一个会话正在进行(即已登录),我希望显示一条消息,显示“看起来您已经有一个帐户” 为此,我尝试使用以下代码检查当前会话: <% if session[:user_id]? %> <div id="error_expanation">Seems like you already have an account with us. <% link_to "Sign in now", login %>

在我的Rails应用程序中,如果用户试图创建一个新帐户,并且已经有一个会话正在进行(即已登录),我希望显示一条消息,显示“看起来您已经有一个帐户”

为此,我尝试使用以下代码检查当前会话:

<% if session[:user_id]? %>
<div id="error_expanation">Seems like you already have an account with us.
  <% link_to "Sign in now", login %></div>
<% end %>
我很确定是“session[:user_id]?”导致了这个问题,因为如果我用另一个if语句中的内容替换它,它就会工作

你知道我需要修复什么来检查这个吗?谢谢

哦,这是我的sessions_controller.rb(如果需要):

class SessionsController < ApplicationController

  def edit
    session[:return_to] = request.referer
  end

  def new
  end

  def create
    if user = User.authenticate(params[:email], params[:password])
      session[:user_id] = user.id
      session[:user_name] = user.name
      redirect_to admin_url
    else
      redirect_to login_url, :alert => "Invalid username / password combination"
    end
  end

  def destroy
    session[:user_id] = nil
    redirect_to admin_url, notice => "You've successfully logged out."
  end  

end
class sessioncontroller“无效的用户名/密码组合”
结束
结束
def销毁
会话[:用户\u id]=无
重定向到管理员url,注意=>“您已成功注销。”
结束
结束

我强烈建议您使用类似设备的登录逻辑,因为它比您自己的任何代码都更安全。然后你可以做一些类似的事情:

我建议更改这一行:

<% if session[:user_id]? %> 到

这应该可以解决问题。更干净的解决方案是向应用程序控制器添加函数调用,如下所示:

class ApplicationController def user_is_logged_in? !!session[:user_id] end end 类应用程序控制器 def用户是否已登录? !!会话[:用户标识] 结束 结束 然后您可以执行以下操作:

<% if user_is_logged_in? %>
请尝试完美的解决方案,谢谢。仍在努力掌握Ruby语法,并在适当的时候使用问号之类的东西。函数调用结束时的问号始终是函数定义的一部分,它们只是表示函数结果为布尔值(true或false)的约定。很高兴我能帮上忙。只是想补充一下JSCHOR的评论——设计: class ApplicationController def user_is_logged_in? !!session[:user_id] end end <% if user_is_logged_in? %>