2011-02-02 11 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]'ですか?それは問題を引き起こしています。なぜなら、別のif文から何かを置き換えると、それが機能するからです。

私はこれを確認するために何を修正する必要がありますか?ありがとう!

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 user_is_logged_in? %> 
+0

完璧なソリューション、ありがとう。まだRubyの構文を保持しようとしていて、疑問符のようなものを使うのに適切な時間です。 – rottendevice

+0

関数呼び出しの最後の疑問符は、常に関数定義の一部であり、関数の結果がブール値(真または偽)であることを示す慣習に過ぎません。お役に立てて嬉しいです。 –

0

を、それがどのロールyour-よりも安全だろうと私は強く、ログインロジックのデバイスのようなものを使用することができ促すだろう。それが必要なら

ああ、ここは私のsessions_controller.rbです自分のコード。問題を修正する必要があります

 
<% if session[:user_id] %> 

 
<% if session[:user_id]? %> 

:私はこの行を変更することをお勧め<%= dowhatever if user_signed_in? %>

+1

を試してみてください - Devise:https://github.com/plataformatec/devise – jakeed1

1

だけjschorrさんのコメントに追加する<% if session[:user_id] != nil %>

関連する問題