2016-07-12 20 views
0

Ich benutze Schienen 4.2.4. Ich habe die unten Methoden in meiner Klasse ...Warum bekomme ich diese undefinierte Methode in Rails, wenn die Methode klar definiert ist?

def self.object_desc_link(event_id, app_id, token, bib_no) 
    OBJECT_DESC_LINK_TEMPLATE.sub(%r{events\/([^\\])+}, "events=#{event_id}") 
          .sub(%r{appid=([^\&])+}, "appid=#{app_id}") 
          .sub(%r{token=([^\&])+}, "token=#{token}") 
          .sub(%r{search=([^\&])+}, "search=#{bib_no}") 
    end 


    def process_page_data(object_id, content) 
    … 
     object_desc_link_str = self.object_desc_link(@event_id, @app_id, @token, i) 

Aber wenn es um die obige Zeile bekommt, erhalte ich die Fehler

undefined method `object_desc_link' for #<MyService:0x007f8cb3584840> 

Die Schreibweise korrekt aussieht, also warum soll ich diesen Fehler?

Antwort

0

Es könnte mehr Informationen von Ihrer Klasse erfordern, aber von dem, was ich sehen kann -

Es sieht aus wie object_desc_link() ist eine Klassenmethode. Wenn es in process_page_data() aufgerufen wird - was eine Instanzmethode ist - wird self zur Instanz und nicht zur Klasse.

Sie können also diesen Fehler erhalten, da object_desc_link() nicht als Instanzmethode für Instanzen dieser Klasse existiert. Es ist nur verfügbar, um in der Klasse angerufen zu werden.

Es sieht so aus, als ob Sie object_desc_link() zu einer Instanzmethode ändern möchten, aber ich kann nicht ohne weitere Informationen darüber sagen, was Sie erreichen möchten.

Ich hoffe, dass hilft!