2013-12-23 1 views
1

내가 어떤 종류의 예정된 (cron) 메서드 (나는 그것이 레이크에 의해 호출 될 것 같아요)를 가져 와서 일부 원격 데이터 (대부분 HTML) 그런 다음 내 모델에 저장하십시오.레일 3 유틸리티 메서드를 만들려면 바로 장소

내 모델에서 원격 데이터를 가져오고 동일한 모델에서 다른 데이터를 구문 분석하고 저장하는 메소드를 만들었습니다. 나는 틀렸다고 느낀다. 그것은 내 질문이다 :

나의 가져 오기 및 파싱 방법은 어디에서해야합니까? 모듈을 만들어야합니까? Lib을 만들어야합니까?

나는 그것을 할 "레일 방법"이 있어야한다고 생각하지만, 아직 그것을 알아 내지 못했습니다. 팁 좀 줄 수 있어요?

+1

lib에 넣어야합니다. –

답변

2

나의 제안은 단지 방법이 엄격 모델의 지속성 범위와 관련된 모델 내부에 유지하는 것입니다.

새 코드는 엄격하게 지속성과 관련이 없습니다. 데이터 가져 오기 도구로 간주 될 수 있습니다. 이를 위해 새로운 클래스/모듈을 쉽게 만들 수 있습니다.

예를 들어, 라이브러리가 일부 HTML을 다운로드한다고 가정하고 분석하여 콘텐츠를 모델 인스턴스로 저장하십시오.

이 파일은 /lib에 있어야합니다 (예 : /lib/crawler.rb).

class Crawler 
    def run(url) 
    # ... 
    fetch(...) 
    parse(...) 
    import(...) 
    end 

    def fetch(...) 
    # ... 
    end 

    def parse(...) 
    # ... 
    end 

    def import(...) 
    # ... 
    result.each do |result| 
     Model.create(...) 
    end 
    end 
end 

이 당신의 Model 클래스가 신속하게 여러 가지 기능에 속하는 방법의 전체가되지 않습니다 보장합니다.

또한이 라이브러리를 Model과 별도로 테스트 할 수 있습니다.

레이크 작업이나 작업자의 경우 크롤러의 새 인스턴스를 만들기 만하면됩니다 (다시 한 번 예입니다).

tast :crawler => [:environment] do 
    craweler = Crawler.new 
    craweler.run(...) 
end 
0

새 모델을 사용할 모델의 수에 따라 몇 가지 작업을 수행 할 수 있습니다.

'도우미'모델에 추가하거나 새 모듈을 만들어 lib 디렉토리에 배치 할 수 있습니다. 그런 다음 모델에 lib/모듈을 포함 할 수 있습니다. 좋은; 깨끗한 코드.

enter image description here