2010-08-02 2 views
4

특정 시간 동안 "읽기 전용 모드"에 넣고 싶은 대화 형 Ruby on Rails 응용 프로그램이 있습니다. 이를 통해 사용자는 필요한 데이터를 읽을 수 있지만 데이터베이스에 쓰는 작업은 차단할 수 있습니다.Ruby on Rails 응용 프로그램에 대한 읽기 전용 모드

이 작업을 수행하는 한 가지 방법은 쓰기가 수행되기 전에 확인 된 데이터베이스에 true/false 변수가 있는지 확인하는 것입니다.

내 질문. 거기에이 문제에 대한 더 우아한 해결책이 있습니까?

답변

10

당신이 정말로 어떤 데이터베이스 쓰기를 방지하려면 상상할 수있는 가장 쉬운 방법은 모델의 readonly? 메서드를 재정의하여 선택한 모델이나 모든 ActiveRecord 모델에 대해 항상 true를 반환하는 것입니다. 모델이 읽기 전용으로 설정된 경우 (보통 #readonly!을 호출하여 수행) 레코드를 저장하려고하면 ActiveRecord::ReadOnlyRecord 오류가 발생합니다.

module ActiveRecord 
    class Base 
    def readonly? 
     true 
    end 
    end 
end 

+0

이 잠재적으로 흥미있는 솔루션입니다 (실제로 테스트되지 않은 코드는,하지만 당신은 ... 아이디어가 생각 난다). 특정 모델에 대해 read only 모드를 on/off로 전환하는 방법은 무엇입니까? – Nicolo77

+0

ActiveRecord :: Base를 monkeypatching함으로써, 모든 모델에 영향을 미칠 것입니다 (나는 그것이 당신이 찾고있는 것이라고 생각했습니다). 'def readonly? '와 같이 실제 클래스를 검사하는 멋진 조건을 작성할 수 있습니다. self.class === MyProtectedClass? 사실 : 최고; 끝 '하지만, 그것은 혼란에 빠지게 될 수 있습니다 - 아마 읽기 전용을 직접 무시하는 것이 더 깔끔합니까? 메소드를 수정하려는 모든 모델 클래스에 추가하십시오. – Zargony

+0

Btw, 대신 읽기 전용? 메소드를 사용한다면, 모든 레코드를 읽기 전용으로 설정하는 after_find 콜백을 추가하는 것만으로도 눈에 거슬리지 않고 '깨끗합니다.': def after_find; 읽기 전용 !; end' – Zargony