Подтвердить что ты не робот

Как вызвать метод rails 3 model в консоли

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

Вот весь класс (я пытаюсь вызвать 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

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

4b9b3361

Ответ 1

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

def self.generate_list
  ...
end

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

Ответ 2

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

Запустите консоль рельсов: $ rails console

И создайте новый Podcast, вызывая метод на нем:

> pod = Podcast.new
> pod.generate_list

Ответ 3

Или, если вы не хотите переписывать свой код, следуйте этому.

Введите rails c на терминал, чтобы открыть консоль, а затем просто выполните:

p = Podcast.new
p.generate_list

Ответ 4

Это метод экземпляра, поэтому попробуйте:

Podcast.first.generate_list

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

def self.generate_list

И назовите его:

Podcast.generate_list