检查会话

rot*_*ice 2 ruby ruby-on-rails 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 %>
Run Code Online (Sandbox Code Playgroud)

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

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
Run Code Online (Sandbox Code Playgroud)

我很确定'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
Run Code Online (Sandbox Code Playgroud)

Pan*_*kos 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? %>