2011-01-24 4 views
16

나는 레일스 3 모델에서 nokogiri로 XML을 파싱하는 메소드를 가지고있다. 콘솔에서이 메서드를 호출하여 해당 메서드를 테스트하려면 어떻게해야합니까?콘솔에서 레일스 3 모델 메소드를 호출하는 방법

class Podcast < ActiveRecord::Base 

validates_uniqueness_of :name 

serialize :hosts 

def generate_list 

# fetch the top 300 podcasts from itunes 
itunes_top_300 = Nokogiri.HTML(open("http://itunes.apple.com/us/rss/toppodcasts/limit=300/explicit=true/xml")) 

# parse the returned xml 
itunes_top_300.xpath('//feed/entry').map do |entry| 
    new_name = entry.xpath("./name").text 
    podcast = Podcast.find(:all, :conditions => {:name => new_name}) 
    if podcast.nil? 
    podcast = Podcast.new(
     :name => entry.xpath("./name").text, 
     :itunesurl => entry.xpath("./link/@href").text, 
     :category => entry.xpath("./category/@term").text, 
     :hosts => entry.xpath("./artist").text, 
     :description => entry.xpath("./summary").text, 
     :artwork => entry.xpath("./image[@height='170']").text  
    ) 
    podcast.save 
    else 
    podcast.destroy 
    end 
end 

end 

end 

편집 : 와우, 조회수 1000

여기에 전체 클래스 (나는 generate_list를 호출하기 위해 노력하고있어)입니다. 이 질문이 사람들을 도왔을 때 도움이 되었기를 바랍니다. 1 년 전만해도 인스턴스 메소드와 클래스 메소드의 차이점을 이해할 수 없었습니다. 이제 복잡한 서비스 지향 응용 프로그램과 백엔드를 루비, 레일 및 기타 여러 언어/프레임 워크로 작성하고 있습니다. 스택 오버플로가 그 이유입니다. 사람들이 문제를 해결하고 해결책을 이해할 수있게 해 주신 것에 대해이 공동체에 많은 관심을 가져 주셔서 감사합니다.

Podcast.first.generate_list 

당신은 다음과 같이 선언하여 클래스 메소드를해야한다 :

def self.generate_list 

을 그리고 전화 :

+0

이 메소드가 정의하는 방법을 우리에게 보여주십시오. –

답변

21

를이 이 메서드를 클래스 메서드로 사용하려는 것처럼 보이므로 다음과 같이 정의해야합니다.

def self.generate_list 
    ... 
end 

그러면 이것을 Podcast.generate_list이라고 부를 수 있습니다.

+0

고마워, 이건 내가 정확히 찾고 있었던거야. – lightyrs

+0

메서드가 인수를 사용하면 어떻게됩니까? – bcackerman

+1

@bcackerman 그런 다음 인수를 취하는 메소드를 호출하면됩니다 :'Podcast.generate_list (arg1, arg2)' –

1

그것은 인스턴스 메서드 그렇게 시도의

Podcast.generate_list 
12

코드에서 실제로 generate_list 메서드가 Podcast를 빌드하고 저장 한 것처럼 보입니까?

는 레일 콘솔을 시작합니다

: $ rails console

하고 새 팟 캐스트를 만들고, 그것에 방법 전화 : 당신은 당신의 코드를 다시 작성하지 않으려면,

> pod = Podcast.new 
> pod.generate_list 
+0

다른 사람들이'def self.generate_list'에서 언급했듯이 이것을 인스턴스 메소드로 변환한다. – raidfive

+0

이것은 정확히 올바르게 작동했다. "다시로드하십시오!" 코드를 변경하면 본인. 나를 위해 일하지 않았다. – bcackerman

3

을 또는이를 따라 . 터미널에

유형 rails c는 바로 수행 콘솔을 엽니 다 :

p = Podcast.new 
p.generate_list 
관련 문제