2016-06-22 12 views
0

ich einige Probleme mit versuchen, eine Instanz zu nennen:NoMethodError: nicht definierte Methode `onvos_encoded_url‘ - Ruby on Rails

in meinem ersten Modell-Datei: "video.rb" ein bekam diesen Code:

class Vimeo::Video < ActiveRecord::Base 
     def onvos_encoded_url 
     hash = json_onvos() 
     enc = Base64.encode64(hash.to_json) 
     return URI::encode(enc) 
     end 
end 

ihnen, dass ich versuche, es zu nennen scheduller.rake

desc "Tareas" 
task :update_videos => :environment do 
    onvos_service() 
end 

def onvos_service 
    @enc = Vimeo::Video.onvos_encoded_url 
    puts @enc 
end 

ich die Massage bekam

NoMethodError: undefined method `onvos_encoded_url' for #<Class:0x007fe003e9eef0> 

Tasks: TOP => update_videos 

Antwort

1

Sie haben eine Instanzmethode definiert, die Sie jedoch als Klassenmethode bezeichnet haben.

Sie haben 2 Möglichkeiten:

Verwenden Sie eine Klassenmethode

In Ihrer Klasse:

class Vimeo::Video < ActiveRecord::Base 
    def self.onvos_encoded_url 
    hash = json_onvos() 
    enc = Base64.encode64(hash.to_json) 
    return URI::encode(enc) 
    end 
end 

In Rake Aufgabe:

desc "Tareas" 
task :update_videos => :environment do 
    onvos_service() 
end 

def onvos_service 
    @enc = Vimeo::Video.onvos_encoded_url 
    puts @enc 
end 

eine Instanz Methode

In Ihrer Klasse:

class Vimeo::Video < ActiveRecord::Base 
    def self.onvos_encoded_url 
    hash = json_onvos() 
    enc = Base64.encode64(hash.to_json) 
    return URI::encode(enc) 
    end 
end 

In Rake Aufgabe:

desc "Tareas" 
task :update_videos => :environment do 
    onvos_service() 
end 

def onvos_service 
    @enc = Vimeo::Video.new.onvos_encoded_url 
    puts @enc 
end 

Als unabhängiges beiseite, gibt Rubin implizit den letzten Ausdruck in einem Verfahren, so dass die return s nicht notwendig ist, dieser Kontext.

+0

Sie sagten ihm das Richtige, aber Sie sollten seinen Code anpassen, um es klar zu machen. –

+0

danke Josh, würde es dir etwas ausmachen, mir ein Beispiel zu geben, weil ich ein bisschen verwirrt bin, wie ich es nennen sollte –

+0

@EdoardoLopez Beispiele hinzugefügt – Josh

0

ändern

def onvos_encoded_url 

zu

def self.onvos_encoded_url 

Weil Sie eine Klassenmethode definieren wollen und nicht eine Instanzmethode.