2011-01-24 929 views
16

Tengo un método en un modelo de rails 3 que analiza XML con nokogiri. ¿Cómo puedo llamar a este método en la consola para probarlo?Cómo llamar a un método de modelo rails 3 en la consola

Aquí está toda la clase (Estoy intentando llamar 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 

Editar: Vaya, 1000 visitas. Espero que esta pregunta haya ayudado tanto a las personas como a mí. Me resulta sorprendente cuando recuerdo esto, hace poco más de un año, no pude determinar la diferencia entre los métodos de instancia y los métodos de clase. Ahora estoy escribiendo aplicaciones y backends complejos orientados a servicios en ruby, Rails y muchos otros lenguajes/frameworks. Stack Overflow es la razón de esto. Muchas gracias a esta comunidad por capacitar a las personas para que resuelvan sus problemas y comprendan sus soluciones.

+0

Por favor, nos muestran cómo se define este método. –

Respuesta

21

Se parece que quieres utilizar esto como método de clase, por lo que debes definirlo así:

def self.generate_list 
    ... 
end 

A continuación, puede llamar a esto como Podcast.generate_list.

+0

Gracias, esto es precisamente lo que estaba buscando. – lightyrs

+0

¿Qué pasa si el método toma argumentos? – bcackerman

+1

@bcackerman Luego llámalo como quieras llamar a un método que tenga argumentos: 'Podcast.generate_list (arg1, arg2)' –

1

Se trata de un método de instancia a fin de tratar:

Podcast.first.generate_list 

debe hacer un método de clase, al declarar como sigue:

def self.generate_list 

y llamarlo:

Podcast.generate_list 
12

Desde su código, parece que su método generate_list realmente construye el Podcast y lo guarda?

poner en marcha la consola de rieles: $ rails console

y crear un nuevo podcast, llamando al método en él:

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

O convertirlo en un método de instancia como otros han mencionado con 'def self.generate_list' – raidfive

+0

Esto funcionó exactamente bien. Asegúrate de "recargar!" si cambias el código Yo. no funcionó para mí – bcackerman

3

O, si usted no quiere volver a escribir el código, siga este .

Tipo rails c en el terminal para abrir la consola, a continuación, sólo hacer:

p = Podcast.new 
p.generate_list 
Cuestiones relacionadas