22 votes

Comment appeler une méthode de modèle Rails 3 dans la console ?

J'ai une méthode dans un modèle rails 3 qui analyse le XML avec nokogiri. Comment puis-je appeler cette méthode dans la console afin de la tester ?

Voici la classe complète (j'essaie d'appeler 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 vues. J'espère que cette question a aidé les gens autant qu'elle m'a aidé. Il est étonnant pour moi quand je regarde en arrière que, il ya un peu plus d'un an, je ne pouvais pas comprendre la différence entre les méthodes d'instance et les méthodes de classe. Aujourd'hui, j'écris des applications complexes orientées services et des backends en ruby, Rails, et bien d'autres langages/frameworks. Stack Overflow en est la raison. Merci beaucoup à cette communauté qui permet aux gens de résoudre leurs problèmes et de comprendre leurs solutions.

25voto

Ryan Bigg Points 64561

Il semble que vous souhaitiez utiliser cette méthode comme une méthode de classe, et vous devez donc la définir comme suit :

def self.generate_list
  ...
end

Vous pouvez alors l'appeler comme Podcast.generate_list .

16voto

raidfive Points 4308

D'après votre code, il semble que votre generate_list construit réellement le Podcast et le sauvegarde ?

Démarrer la console des rails : $ rails console

Et créer un nouveau Podcast, en appelant la méthode sur lui :

> pod = Podcast.new
> pod.generate_list

3voto

Júlio Santos Points 2638

Ou, si vous ne voulez pas réécrire votre code, suivez ceci.

Type rails c sur le terminal pour ouvrir la console, puis faites simplement :

p = Podcast.new
p.generate_list

1voto

apneadiving Points 64660

C'est une méthode d'instance, alors essayez :

Podcast.first.generate_list

Vous devez créer une méthode de classe en la déclarant comme suit :

def self.generate_list

Et l'appeler :

Podcast.generate_list

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X