Как вызвать метод рельсов 3 модели в консоли - PullRequest
18 голосов
/ 24 января 2011

У меня есть метод в модели 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 и многих других языках / платформах. Причиной этого является переполнение стека. Огромное спасибо этому сообществу за то, что оно дало людям возможность решать свои проблемы и понимать их решения.

Ответы [ 4 ]

21 голосов
/ 24 января 2011

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

def self.generate_list
  ...
end

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

13 голосов
/ 24 января 2011

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

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

И создайте новый подкаст,вызов метода для него:

> pod = Podcast.new
> pod.generate_list
3 голосов
/ 24 января 2011

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

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

p = Podcast.new
p.generate_list
1 голос
/ 24 января 2011

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

Podcast.first.generate_list

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

def self.generate_list

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

Podcast.generate_list
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...