2011-02-02 3 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 

이렇게하려면, 나는 다음과 같은 코드를 사용하여 현재 세션을 확인하기 위해 노력하고있어 꽤 확실한 '세션 [: 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 

답변

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

완벽한 솔루션, 감사합니다. Ruby 문법을 유지하려고 시도하고, 물음표와 같은 것을 사용할 적절한 시간. – rottendevice

+0

함수 호출 끝의 물음표는 항상 함수 정의의 일부이며 함수 결과가 부울 (true 또는 false)임을 나타내는 규칙 일뿐입니다. 다행히 도울 수있어. –

0

어떤 롤 your- 자신의 코드. 내가이 줄을 변경 제안 <%= dowhatever if user_signed_in? %>

+1

을 시도 - Devise : https://github.com/plataformatec/devise – jakeed1

1

그냥 jschorr의 코멘트에 추가 <% if session[:user_id] != nil %>