2011-02-02 140 views
2

在我的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]?''这是造成这个问题的原因,因为如果我用另一个语句替换它,它就会起作用。

任何想法,我需要修复以检查这个?谢谢!

哦,这是我的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 

回答

7

我建议修改这一行:

 
<% if session[:user_id]? %> 

 
<% if session[:user_id] %> 

这应该解决这个问题。清洁的解决方案是一个函数调用添加到应用程序控制器是这样的:

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

 
<% if user_is_logged_in? %> 
+0

完美的解决方案,谢谢。仍试图获得Ruby语法的掌握,以及使用诸如问号之类的东西的适当时间。 – rottendevice 2011-02-03 02:52:56

0

我会强烈建议你使用类似设备进行登录的逻辑,因为它会比更安全的任何滚你的 - 自己的代码。然后,你可以这样做:<%= dowhatever if user_signed_in? %>

+1

只需添加到jschorr的评论 - 设计:https://github.com/plataformatec/devise – jakeed1 2014-03-10 17:41:06

1

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