2010-05-12 6 views
1

우리 식당/레스토랑/show.html.erb에있는 특정 레스토랑에 대한 평가를 제출할 양식이 있습니다. 우리는 로그인 한 사용자가 새 등급을 작성하기를 원합니다. 우리는인증 후 원하지 않는 리디렉션

before_filter를 넣어 : login_required : 단지 => [: 새로운 : 생성 (하지만 우리는 단지 시도 "생성")

우리 RatingsController 위에. 등급 세부 정보를 입력 한 후 제출 버튼을 클릭하면 로그인하라는 메시지가 표시됩니다 (원하는 내용). 사용자 이름과 비밀번호를 입력하고 로그인 양식을 제출하면 e로 다시 연결됩니다. 지./restaurants/36/ratings, 그러나 우리는 우리가 어디서 왔는지 다시 돌아가고 싶습니다. 지./restaurants/36 /. redirect_to (: back)를 시도했지만 로그인 양식으로 다시 리디렉션됩니다. 또한 새 등급은 데이터베이스에 저장되지 않습니다.

리디렉션을 어떻게 바꿀 수 있고 평가가 저장되는지 확인하는 방법에 대해 알고 싶습니다.

감사합니다.

+0

너희들이 지금이 알아낼나요 :

은 내가이 글에서이 아이디어의 일부를 찾은 것 같아? –

답변

1

면책 조항 : 나는 restful-authentication을 사용하지 않습니다. (만약 당신이 선택의 여지가 있다면 authlogic을 들여다 볼 수도 있습니다 - 당신이 소개를 원한다면 Railscast about it이 있습니다.) 그렇다하더라도 세션에 "back"값을 저장하는 것은 여전히 ​​효과가 있습니다. 여기에 내가 내 상황에서 할 수있는 작업은 다음과 같습니다

# app/controllers/application.rb 

before_filter :authorize 

protected 

    # Override in controller classes that should NOT require authentication (such as logging in, by definition) 
    def require_login? 
    return true 
    end 

private 

    def authorize 
    if require_login? && current_user.nil? 
     session['return_to'] = request.request_uri 
     redirect_to login_url 

     return false 
    end 
    end 

# app/controllers/user_sessions_controller.rb 

def create 
    # [...] 

    if @user_session.save 
    flash[:notice] = 'Successfully logged in.' 

    if session['return_to'].nil? 
     redirect_to root_url 
    else 
     redirect_to session['return_to'] 
    end 
    else 
    render :action => 'new' 
    end 
end 

# app/controllers/users_controller.rb 

# Just as an example: 
def require_login? 
    return case action_name 
    when 'new' 
    false 
    when 'create' 
    false 
    else 
    true 
    end 
end 

내 어플은 require_login? 반환 true이 이유입니다, 인증을 필요로하는 거의 모든 행동이 필요합니다. 니가 원하는대로 session['return_to'] 아이디어를 조정할 수 있다고 생각합니다. http://www.urubatan.info/2007/10/a-very-simple-login-example-with-rails/