2011-03-30 5 views
1

난 큰, 끔찍하게 작성한 PHP 애플 리케이션을 레일에 다시 쓰고 있어요. 우리는 몇 년 동안 프로덕션 환경에서이 앱을 실행 해 왔으며 지금 실제로해야 할 일에 대해 좋은 생각을 가지고 있습니다. 따라서 앱을 지원하기 위해 코드베이스를 깨끗하게 마침내 얻으려고합니다.사용자 별 검색

내가 알아 내려고하는 한 가지는 우리 모델에있는 일부 기능을 처리하는 방법입니다. 이 응용 프로그램은 다중 회사 웹 응용 프로그램이며 응용 프로그램을 사용하는 각 회사 (및 모든 사용자)는 많은 기본 설정과 사용자 지정 조회를가집니다. 기본 설정은 쉽고, 사용자와 회사를위한 기본 설정 모델을 설정하고 키/값 테이블을 필수적으로 만들 계획입니다. 나는 우리 조회 모델을 가지고 조금 더 고심하고있다. 예를 들어, 상태 가져 가라. 일반적인 응용 프로그램에서는 상태 테이블을 가지고 작업을 완료해야합니다. 우리의 경우 상태는 로그인 한 사용자의 회사에 따라 다를 수 있습니다.

현재 앱에서는 구현이 다소 잘못되었다고 생각합니다. 본질적으로 company_id 열이있는 상태 테이블과 모델이 있습니다. company_id = -1로 일련의 기본 상태를 제공합니다. 그런 다음 회사가이를 무시하면 company_id를 사용하여 테이블에 항목을 저장합니다. 앱에서는 기본적으로 company_id를 전달하는 저장 프로 시저를 통해 가져오고 기본 항목 또는 회사 별 항목을 반환합니다.

나는 쉽게 데이터에 액세스하기가 어렵 기 때문에 주로이 팬이 아닙니다. 특히, 기본값 및 회사 별 옵션을 테이블에 포함 시키면 간단한 쿼리를 수행하여 상태 목록을 얻을 수 없다는 것을 의미합니다. 즉, 2 개의 쿼리 (company_id의 경우 결과가없는 경우 -1) 또는 복잡한 질의/프로 시저가 sql의 count 및 if 문 수행. 플러스 측면에서는 다른 객체가 status_id를 참조하고 어떤 상태의 테이블을 얻을 수 있기 때문에 쉽게 관계를 맺을 수 있습니다.

우리는 아마도 12 가지 모델에이 기능을 갖추고 있으므로 모든 모델에서 쉽게 구현할 수있는 좋은 모델을 제시하려고합니다.

누군가 구현할 수있는 더 좋은 방법에 대한 제안 사항이 있습니까?

답변

0

하나의 가능성은 단순히 사용자 모델의 방법으로 상태를 구현하는 것일 수 있습니다. 예 :

class User < ActiveRecord::Base 
    belongs_to :company 

    # users table has a status column 
    def status 
    read_attribute(:status) || company.default_status 
    end 
end 

이제 사용자가 상태 세트를 가질 수 있으며 상태는 NULL 일 수 있습니다. 상태가 NULL이면 read_attribute (: status)는 nil을 반환하고 대신 company.default_status를 반환합니다.

이보다 더 복잡하고 사용자 당 여러 개의 상태가 필요할 수있는 경우 상태 모델에서 유사한 방법을 사용할 수 있습니다. 여기서 독자는 관련 값 열에 대해 독자를 재정의하고 값이 NULL입니다.

관련 문제