2012-04-12 3 views
0

그래서 스플래시 페이지를 만들고이 페이지 당 리디렉션을 설정했습니다. post. 하지만 앱이 엉망이됩니다. 아래에 코드가있을 때, 앱은 사용자가 제출 한 이메일 주소를 저장하지 않습니다. (I 리디렉션 코드를 주석 때, 모든 것이 잘 작동합니다.) 레일 before_filter 차단 성공 저장 방법 만들기

class ApplicationController < ActionController::Base 
    protect_from_forgery 
    include SessionsHelper 

    before_filter(:except => :splash) do 
    redirect_to root_path 
    end 

end 

여기 컨트롤러입니다. 그것은 Railscast # 124에 근거합니다. 따라서 스플래시 페이지에는 로그인 한 사용자가 없습니다. 즉 초대장 저장 후 저장해야하고 "감사합니다. 준비가되면 알려 드리겠습니다"라는 의미입니다. 그러나 위 필터가 제자리에있게되면 '새'를 다시 렌더링합니다.

class InvitationsController < ApplicationController 

    def new 
    @invitation = Invitation.new 
    end 

    def create 
    @invitation = Invitation.new(params[:invitation]) 
    @invitation.sender = current_user 
    if @invitation.save 
     if signed_in? 
     UserMailer.invitation(@invitation).deliver 
     flash[:notice] = "Thank you, invitation sent." 
     redirect_to hunts_path  
     else 
     flash[:notice] = "Thank you, we will notify when we are ready." 
     redirect_to root_path 
     end 
    else 
     render :action => 'new' 
    end 
    end 

end 

내가 뭘 잘못하고있어?

답변

2

음, 확실하지는 않지만 @invitation.sender을 현재 사용자로 설정하고 저장 한 후에 signed_in?을 테스트합니다. 사용자가 로그인하지 않은 상태에서 초대장을 저장할 수 없습니까?

편집 : 죄송합니다. 리디렉션을 제거하면 모든 기능이 정상적으로 작동합니다. 나는이 리다이렉트가 다른 행동이 아무것도하지 못하게한다고 생각한다. (단 한 번만 리다이렉트 할 수있다.)

+0

그래. 그것이 문제였습니다. 내가 말한대로 정확하게하기위한 레일에 수치스러워. 나는 필터를 다음과 같이 수정했다.'before_filter (: except => [: splash, : create]) do redirect_to root_path end' –

관련 문제