2011-07-25 5 views
1

멀티 테넌트 공유 db 응용 프로그램에서 쿼리를 실행할 때 SQL 조건의 일부로 항상 계정 범위를 포함하도록 모델을 확장하는 방법을 찾고 있습니다. . 모든 관련 모델에 scoped_by_account과 같은 것을 포함 할 수 있도록 이상적으로 ActiveRecord를 확장합니다.레일에서 모델을 확장하여 항상 특정 범위를 포함하는 방법

저는 인터넷에서 검색 한 결과 바로이 것을 주장하는 플러그인을 발견했습니다. 불행히도, 플러그인의 범위 지정 검색 부분은 내가 말할 수있는 한 멀리 작동하지 않습니다. (여기에서 찾을 수 있습니다 : https://github.com/mconnell/multi_tenant) 플러그인은 액티브을 확장하고 모든 검색에 추가 검색 조건 '분사'에 다음 코드를 사용 : 나는 무엇을 말할 수에서

def self.unscoped 
    ... 
    super.apply_finder_options(:conditions => { account_id => Account.current.id }) 
end 

는, 이것은 적용에 성공하지 못한 조건에 모두 검색. 내가 Project.all을 쿼리하면 현재 계정을 무시하고 모든 결과를 반환합니다. Project.unscoped을 사용하는 경우에만 올바르게 작동합니다.

내 질문 : 나는 액티브가 그 모델에 대한 실행하는 모든 쿼리에 내 추가 조건을 포함하도록 확장 할 수있는 방법
? 시간에 대한

들으, 어윈은

답변

0

당신은 default_scope 찾고 계십니까?

+0

no. 우리의 응용 프로그램에서는 default_scope을 다른 여러 가지 용도 (예 : 기본 정렬 순서 설정 등)로 사용합니다. 내가 찾고있는 것은 낮은 lvl에서 AR을 확장하여 ** 해당 모델에서 실행되는 모든 ** 쿼리에 조건을 삽입하는 것입니다. – ErwinM

+0

그래,하지만 왜 그 모델의 기본 범위에 포함시키지 않겠습니까? 또한이 테이블에 조건이 포함되어 있는지 묻는 중입니까? – Brad

+0

예. 상태는 항상 포함되어야합니다. default_scope가 작동하지 않는 이유는 그것이 할 수 있기 때문이며, 종종 오버라이드되어야합니다. 그런 다음 다시 조건을 포함하여 수동으로 걱정해야합니다. 그것이 우리가 낮은 수준을 찾고, 그것을 포함하는 안전한 방법을 찾고있는 이유입니다. 물론 기본 AR 파인더 메서드를 재정의 할 수 있지만 좀 더 우아한 솔루션을 찾고있었습니다. – ErwinM

관련 문제