2010-05-12 1 views
0

저는 Basecamp 스타일의 하위 도메인이있는 응용 프로그램을 가지고 있습니다. 즉, Projects, Users, Apples and Oranges가 있습니다. 사용자, 사과 및 오렌지는 모두 프로젝트에 입력되며 http://project.myapp.com에만 존재합니다. 내가 User_Apple과 Oranges에 project_id를 추가했는데, 물론이 세 객체의 ID가 전체적으로 증가한다는 것을 제외하면 모든 것이 작동합니다. 그리고 앱 전체에서이 ID로 객체를 조회합니다.베이스 캠프 스타일 하위 도메인 및 모델 ID

이것은 모범 사례처럼 보이지 않습니다. 대신 보조 키를 사용하여 조회를 수행해야합니까? 이것이 효율성에 어떤 영향을 미칩니 까? 이것을 다루는 좋은 블로그 게시물이 있다면, 좋을 것입니다.

답변

2

데이터베이스에 전역 ID가 있으면 괜찮습니다. 가능한 경우 해당 데이터베이스 ID를 표시하지 말고 대신 친숙한 URL을 사용하십시오.

어쨌든 사용자를 신뢰해서는 안됩니다. ID가 있어도 해당 레코드가 프로젝트와 연결되어 있는지 확인하십시오. 프로젝트 has_many :apples 가정 프로젝트에 바로 범위의 모든 것을 컨트롤러에서

2

:

class ApplesController < ApplicationController 
    before_filter :find_apple 

    private 
    def find_apple 
     if current_user.is_admin? 
     @apple = Apple.find(params[:id]) 
     else 
     # Scope to the current project/subdomain 
     # Note the use of current_project 
     # You need to exchange this with whatever you use to get the project object 
     @apple = current_project.apples.find(params[:id]) 

     # Do something here if @apple is nil, like redirect 
     end 
    end 
end