2014-04-30 2 views

답변

0

나는 내 보석에서 같은 일을했습니다. 나는 당신이 보석/엔진에 App 폴더를 만들었다 고 생각한다. "백엔드"라는 또 다른 폴더를 만들고 각 데이터 저장소에 대한 클래스를 만듭니다. 내 경우를 위해 나는 이미 애플리케이션 아키텍처에 삼촌 밥의 프리젠 테이션 중 하나 볼 수도 몽고와 레디 스

module Memberfier 
    class RedisStore 
    def initialize(redis) 
     @redis = redis 
    end 

    def keys 
     @redis.keys 
    end 

    def []=(key, value) 
     value = nil if value.blank? 
     @redis[key] = ActiveSupport::JSON.encode(value) 
    end 

    def [](key) 
     @redis[key] 
    end 

    def clear_database 
     @redis.keys.clone.each {|key| @redis.del key } 
    end 
    end 
end 


module Memberfier 
    class MongoStore 
    def initialize(collection) 
     @collection = collection 
    end 

    def keys 
     @collection.distinct :_id 
    end 

    def []=(key, value) 
     value = nil if value.blank? 
     collection.update({:_id => key}, 
         {'$set' => {:value => ActiveSupport::JSON.encode(value)}}, 
         {:upsert => true, :safe => true}) 
    end 

    def [](key) 
     if document = collection.find_one(:_id => key) 
     document["value"] 
     else 
     nil 
     end 
    end 

    def destroy_entry(key) 
     @collection.remove({:_id => key}) 
    end 

    def searchable? 
     true 
    end 

    def clear_database 
     collection.drop 
    end 

    private 

    def collection; @collection; end 
    end 
end 
0

에 대한 별도의를 만들었습니다. 그렇지 않은 경우 here입니다. 선택 모델에서 상속받는 단일 경계 객체를 사용하는 것이 좋습니다. 이 경계 객체는 find, create, delete과 같은 여러 CRUD 메소드를 가질 수 있습니다. 경계 오브젝트는 사용자가 구성한 NOSQL 어댑터를 상속받을 수 있습니다. 예/출처 : http://hawkins.io/2014/01/pesistence_with_repository_and_query_patterns/

관련 문제