Programing

redirect_to! = return

crosscheck 2020. 11. 30. 07:51
반응형

redirect_to! = return


의 동작에 대한 설명을 찾고 redirect_to있습니다.

이 코드가 있습니다.

if some_condition
   redirect_to(path_one)
end

redirect_to(path_two)

경우 some_condition == true이 오류를 얻을 :

이 작업에서 렌더링 및 / 또는 리디렉션이 여러 번 호출되었습니다. 렌더링 또는 리디렉션을 호출 할 수 있으며 작업 당 최대 한 번만 호출 할 수 있습니다.

redirect_to호출 후에도 메서드가 계속 실행되는 것 같습니다 . 다음과 같은 코드를 작성해야합니까?

if some_condition
   redirect_to(path_one)
   return
end

redirect_to(path_two)

예, 리디렉션을 수행 할 때 메서드에서 반환해야합니다. 실제로 응답 객체에 적절한 헤더 만 추가합니다.

더 루비 한 방식으로 작성할 수 있습니다.

if some_condition
    return redirect_to(path_one)
end

redirect_to(path_two)

또는 다른 방법 :

return redirect_to(some_condition ? path_one : path_two)

또는 다른 방법 :

redirect_path = path_one

if some_condition
    redirect_path = path_two
end

redirect_to redirect_path

에서 http://api.rubyonrails.org/classes/ActionController/Base.html :

어떤 조건에서 리디렉션해야하는 경우 "and return"을 추가하여 실행을 중지해야합니다.

def do_something
  redirect_to(:action => "elsewhere") and return if monkeys.nil?
  render :action => "overthere" # won't be called if monkeys is nil
end

당신은 또한 할 수 있습니다

redirect_to path_one and return

좋은 읽기.


이 예제에서와 같이 뒤에 코드 없으면 그럴 필요 없습니다 .returnredirect_to

def show
  if can?(:show, :poll)
    redirect_to registrar_poll_url and return
  elsif can?(:show, Invoice)
    redirect_to registrar_invoices_url and return
  end
end

두 줄의 코드에 대한 Eimantas의 답변 에서 "rubyish way"예제를 통합하려면 :

return redirect_to(path_one) if some_condition

redirect_to(path_two)

메서드 또는 도우미 함수 내에서 리디렉션을 정의하고 컨트롤러에서 조기 반환하려면 :

ActionController :: Metal # performed? -렌더링 또는 리디렉션이 이미 발생했는지 테스트합니다.

def some_condition_checker
  redirect_to(path_one) if some_condition
end

다음과 같이 호출하십시오.

some_condition_checker; return if performed?

redirect_to(path_two)

참고 URL : https://stackoverflow.com/questions/5743534/redirect-to-return

반응형