2011-02-02 143 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 %>