2016-08-05 2 views
0

apartmentdevise 보석을 사용하여 멀티 테넌트 (multi-tenant) 앱을 만들었습니다. 이후 postgresql을 사용하고 있기 때문에 apartment gem은 각 임차인마다 별도의 스키마를 생성합니다. 내 데이터베이스는 소수 테이블로 user 테이블이 공용 네임 스페이스에 있지만 pages 테이블은 각 테넌트 특정 스키마에 있습니다. 각 임차인에게 개별적으로 로그인 할 수 있으며 각 임차인의 페이지 테이블에 대한 별도의 기록을 만들 수 있습니다.레일 : 멀티 테넌트 (multi-tenant) 앱과 동적 라우팅

지금, 나는이 문서가이이 tenant1.example.com/page-slug-here 같은 형식으로 액세스하려면, 나는 내 routes.rb 파일에 규칙을 다음했습니다 : 응용 프로그램이 단일 때

Page.where.not(slug: nil).all.each do |page| 
    get "/#{page.slug}", controller: "pages", action: "show", id: page.id 
end 

이 라우팅 규칙은 잘 작동했다 멀티 테넌시에서는 작동하지 않고 "경로 일치 없음"오류가 발생합니다.

위의 라우팅 규칙에서 데이터베이스 호출이 세입자 특정 스키마 대신 public 스키마에서 찾고 있다고 생각합니다. 이 문제를 해결하는 방법?

답변

0

문제를 해결했습니다. 위에서 붙여 넣은 라우팅 코드는 자습서에서 복사되었지만 apartment 젬이 routes.rb 파일의 ActiveRecord 네이티브 쿼리와 잘 작동하지 않는 것으로 보입니다. 분명히 Page.where()... 호출이 라우트 해결 시점에 세입자 대신에 public 세입자로 매핑되었으므로 라우터에서 컨트롤러로, 컨트롤러에서 입출력 전환이 올바르게 적용되고있었습니다.

나는 다음과 같이 내 라우팅 규칙을 단순화 한 지금은 작동하고 내 컨트롤러 슬러그에 의해 해당 페이지를 찾을 수 있습니다

get '/:slug' => 'pages#show' 
관련 문제