2016-06-16 11 views
0

In der PilotRaceLap-Modellklasse versuche ich, eine Methode aus einer anderen Klasse aufzurufen, bekomme aber immer NoMethodError.Aufruf einer Methode von einer Klasse in eine andere

class PilotRaceLap < ActiveRecord::Base 
acts_as_paranoid 
    belongs_to :race_session 

def mark_splitted 
    prl = RaceSessionAdapter.track_lap_time(pilot.transponder_token,lap_time/2) <<<ERROR HERE 
end 

track_lap_time in diesem Adapter Klasse deklariert ist:

class RaceSessionAdapter 
attr_accessor :race_session 

def track_lap_time(transponder_token,delta_time_in_ms) 
... 
end 

race_session Modellklasse beginnt wie folgt aus:

class RaceSession < ActiveRecord::Base 
acts_as_paranoid 

has_many :pilot_race_laps 
has_many :race_attendees 
+1

'def self.track_lap_time', ohne selbst sind Sie eine Instanzmethode zu erklären, aber da Sie es verwenden müssen als eine Klassenmethode self sollte hinzugefügt werden – niceman

+0

Da ich ein Git-Projekt bearbeiten, nehme ich an, dass track_lap_time bereits im Code verwendet wird. Gibt es keine andere Möglichkeit, die Methode zu erreichen, ohne die Methode selbst zu ändern? –

+1

'RaceSessionAdapter.new.track_lap_time' – niceman

Antwort

0

Verwenden RaceSessionAdapter.new.track_lap_time()

1

track_lap_time eine Klassenmethode sein sollte (es ist jetzt Instanz-Methode). Fügen Sie einfach self. vor dem Namen hinzu.

def self.track_lap_time() 
    ... 
end 

oder schreiben Sie diese Methode in class << self Block

class << self 
    def track_lap_time() 
    ... 
    end 
end 
+0

Dies wird erfordern, den größten Teil des Codes zu ändern, da er bereits in einer funktionierenden App verwendet wird. –

+0

Wenn Sie den Großteil Ihres Codes nicht ändern möchten, können Sie die 'track_lap_time'-Instanzmethode beibehalten mit dieser Implementierung: 'def track_lap_time (* args); self.class.track_lap_time (* args); Ende; def self.track_lap_time (transponder_token, delta_time_in_ms); ...; Ende – jwieczor

Verwandte Themen