2011-11-17 2 views
1

웹 사이트를 개발할 때 일반적인 상황은 여러 가지 다른 리소스를 나열하고 만드는 하나의 인덱스 작업을 수행하는 것입니다.웹 사이트의 다른 장소에서 컨트롤러 작업 재사용

예를 들어 비용이 자동 계산 된 지불 그룹 인 동일한 페이지에 지불 및 비용을 모두 나열하는 트랜잭션 컨트롤러가 있다고 가정 해 보겠습니다.

트랜잭션 인덱스 작업에는 새로운 비용 생성을위한 양식과 새 지불 생성을위한 양식이 있습니다. 이 두 가지 형식은 각각의 컨트롤러에 제출하여 작업을 생성합니다. 데이터가 유효하지 않은 경우 트랜잭션 # index로 리디렉션하고 오류 메시지를 표시해야합니다.

이 단지 일반적인 논의가 특정 문제와 관련이없는있다, 그래서 assumpt 할 수있는 작업은 다음과 같습니다

없음 AJAX는
  • 우리는 공유 기반
  • 에 비용과 지불을 일반화 할 수없는 사용되지 않습니다

    문제는 다른 컨트롤러에 데이터를 제출할 수 있지만 응답을 얻을 수 없다는 것입니다. 리디렉션 할 수는 있지만 데이터 및 유효성 검사 오류가 누적됩니다. 이것에 대한 몇 가지 'hackish'해결책이 있지만 이것을 간단하게하고 싶습니다.

    이 문제를 해결하는 한 가지 방법은 트랜잭션 컨트롤러 (예 : create_expense 및 create_payment)에 특정 작업을 구현하는 것입니다. 그것은 작동하지만 코드 중복과 REST를 깨뜨릴 것이고 나는 그것을 좋아하지 않는다.

    실제 질문은 웹 사이트의 다른 여러 곳에서 컨트롤러 작업을 어떻게 다시 사용할 수 있고 자연스러운 과정으로 느끼게 할 수 있습니까?

    답변

    1

    양식에 hidden_field :redirect_back_to => transactions_path을 포함시킨 다음 해당 컨트롤러에 양식을 게시하고 컨트롤러가 params[:redirect_back_to] (있는 경우)으로 리디렉션하도록 할 수 있습니다.

    이것은 약간 해킹 된 것 같지만, AJAX를 사용하고 싶지 않으면 가장 쉬운 해결책이라고 생각합니다.

    +0

    답변 해 주셔서 감사합니다. 리디렉션을 해결할 수는 있지만 유효성 검사를 완료하고 양식을 미리 채우는 것은 아닙니다. 나는 이미'redirect_to : back'을 플래시 경고와 함께 오류 메시지와 함께 사용하고 있지만, 폼을 지우고 평범한 방법으로 유효성 검사 메시지를 표시하지 않을 것입니다. 나는 더 우아한 뭔가를 찾고 있어요. –

    관련 문제