2011-01-24 4 views
16

У меня есть метод в модели рельсов 3, которая анализирует XML с помощью nokogiri. Как я могу вызвать этот метод в консоли, чтобы проверить его.Как вызвать метод rails 3 model в консоли

Вот весь класс (я пытаюсь вызвать generate_list):

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 

Edit: Wow, 1000 просмотров. Надеюсь, этот вопрос помог людям так же, как и мне. Удивительно для меня, когда я оглядываюсь назад, что чуть больше года назад я не мог понять разницу между методами экземпляров и методами класса. Теперь я пишу сложные сервис-ориентированные приложения и бэкэнды в Ruby, Rails и многих других языках/фреймворках. Переполнение стека является причиной этого. Большое вам спасибо этому сообществу за то, что он дал людям возможность решать свои проблемы и понимать их решения.

+0

Пожалуйста, покажите нам, как определяется этот метод. –

ответ

21

Это похоже, что вы хотите использовать это как метод класса, и поэтому вы должны определить его следующим образом:

def self.generate_list 
    ... 
end 

Тогда вы можете назвать это как Podcast.generate_list.

+0

Спасибо, это именно то, что я искал. – lightyrs

+0

Что делать, если метод принимает аргументы? – bcackerman

+1

@bcackerman Затем назовите его, но вы вызовете метод, который принимает аргументы: 'Podcast.generate_list (arg1, arg2)' –

1

Это метод экземпляра так попробовать:

Podcast.first.generate_list 

Вы должны сделать метод класса, объявив его следующим образом:

def self.generate_list 

И называют это:

Podcast.generate_list 
12

С вашего кода, похоже, ваш метод generate_list действительно создает подкаст и сохраняет его?

Пустите Рельсы консоли: $ 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 
Смежные вопросы