필자는 컨트롤러 전후에 반복적 인 코드를 삽입하여 컨트롤러를 건조시키고 싶습니다.respond_to in after_filter
respond_to do |wants|
wants.html
wants.js { render :layout => "transition" }
end
내가 이렇게 같은 after_filter
이 배치 : 내 현재 프로젝트에서 모든 작업이 같은 respond_to
블록이
after_filter :respond_to_html_or_transition
을하지만이 오류에 이르게 :
Render and/or redirect were called multiple times in this action. Please note that you may only call render OR redirect, and at most once per action. Also note that neither redirect nor render terminate execution of the action, so if you want to exit an action after redirecting, you need to do something like "redirect_to(...) and return".
이는 액션 내에 명시적인 respond_to
또는 redirect
이없는 경우에도 발생합니다. 레일즈 (명백한 respond_to
호출의 부족에 대한)가 교훈있는 추측을 만들고 after_filter
앞에 자신의 respond_to
을 생성하기 때문에이 문제가 발생한다고 가정합니다. 그렇다면 Rails가 그 일을 못하게하고 대신 블록을 after_filter
에 사용하는 방법이 있습니까?
설정 컨트롤러의 기본 하나를 교체합니다. 'render layout : "transition"으로'to_js' 메쏘드를 오버라이드하는 것은 효과가 없습니다. 렌더링되지만 '전환'레이아웃은 사용하지 않습니다. – nullnullnull
방금 작동했습니다. 'render layout : "transition"은 괜찮습니다. 진짜 문제는 응답자를 어떻게 할당했는지에 달려 있습니다. 컨트롤러 내부에'self.responder = CustomActionResponder'를두기보다는 각 액션의 끝에 respond_with (@items, : responder => CustomActionResponder)를 넣었다. 그것은 장황하지만 작동합니다. 왜 다른 접근법이 효과가 없는지 궁금합니다. 레일 4를 사용하고 있습니다. 아마 그것의 가치가 하락 했는가? 아니면 내가 제대로하지 않을거야? – nullnullnull