检查会话

时间:2011-02-02 16:49:16

标签: 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 %></div>
<% end %>

但是,此代码会导致以下错误:

compile error
/path/to/app/views/users/_form.html.erb:17: syntax error, unexpected ';'
');@output_buffer.safe_concat('     ...
   ^
/path/to/app/views/users/_form.html.erb:42: syntax error, unexpected kENSURE, expecting $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

3 个答案:

答案 0 :(得分:7)

我建议改变这一行:

<% if session[:user_id]? %>

<% if session[:user_id] %>

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

class ApplicationController
  def user_is_logged_in?
    !!session[:user_id]
  end
end

然后你可以做到以下几点:

<% if user_is_logged_in? %>

答案 1 :(得分:1)

尝试<% if session[:user_id] != nil %>

答案 2 :(得分:0)

我强烈建议您使用类似设备的登录逻辑,因为它比任何自己动手的代码更安全。然后你可以做类似的事情:<%= dowhatever if user_signed_in? %>