2011-03-08 5 views
0

I 루비 레일에 응용 프로그램에서 다음과 같은 상황이 :리팩토링 및 디커플링 레일 컨트롤러 : 서로 호출 할 수 있습니까?

  • 사용자가 폼을 채우고 (주석), 그녀는 인증 방법 (오픈 ​​아이디, 트위터, 페이스 북을 선택할 수있는 omniauth 페이지를 참조하기 위해 도착하고 좋아한다).
  • omniauth가 채워지며 성공한 사용자가 반환하면 세션이 생성되고 초기 양식 데이터가 처리됩니다 (주석 게시 됨).

나는 내 논리가 주변에 퍼져 있다는 것을 제외하고는 모두 작동합니다. 나는 생각합니다. 추악한 방식입니다. SessionsController은 성공적인 인증에 대한 설명을 작성합니다.

이런 것들을 디커플링하는 좋은 방법은 무엇입니까? Comment 모듈이 SessionsController에 연결 (듣기)해야합니까? 또는 SessionsController가 성공적인 인증에 대한 주석을 저장하기 위해 CommentsController 또는 Comment 클래스의 일부 메소드를 호출해야합니까? 이런 종류의 문제를 해결할 수있는 패턴이 있습니까?

답변

0

컨트롤러간에 공유 기능을 상속 또는 모듈 중 하나를 사용하는 경우 컨트롤러를 다른 컨트롤러에서 호출하는 것이 좋다고 생각하지 않습니다. 특정 문제를 들어 내가 할 것 :

  1. 인증되지 않은 사용자의 게시물을합니다/의견/인증 필터를 확인하기 전에
  2. 를 작성하고 주석 PARAMS 해시와 성공이 다음에 리디렉션 세션에서 위치를 재 저장/session/new
  3. 세션 컨트롤러를 성공적으로 인증하면 저장된 세션으로 리디렉션되기 전에 params 해시를 확인하고 연기 된 모델을 만듭니다.

다른 요청에서 POST를 할 수 있지만 불행히도 할 수 없다면 세션 컨트롤러에 로직을 넣어야합니다.

관련 문제