2016-06-16 22 views
0

PilotRaceLapモデルクラスでは、別のクラスのメソッドを呼び出そうとしていますが、そのままNoMethodErrorを取得しようとしています。あるクラスから別のクラスにメソッドを呼び出す

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は、このアダプタクラスで宣言されています

class RaceSessionAdapter 
attr_accessor :race_session 

def track_lap_time(transponder_token,delta_time_in_ms) 
... 
end 

race_sessionモデルクラスは、そのように起動します:

class RaceSession < ActiveRecord::Base 
acts_as_paranoid 

has_many :pilot_race_laps 
has_many :race_attendees 
+1

'defのself.track_lap_time'、自己ずにインスタンスメソッドを宣言しているが、あなたのようにそれを使用する必要があるために、このメソッドを書きますクラスメソッドselfを追加する必要があります – niceman

+0

私はgitプロジェクトを編集しているので、track_lap_timeはすでにコードで使用されていると想定しています。メソッド自体を変更せずにメソッドに到達する他の方法はありませんか? –

+1

'RaceSessionAdapter.new.track_lap_time' – niceman

答えて

0

使用RaceSessionAdapter.new.track_lap_time()

1

track_lap_timeは、クラスメソッドでなければなりません(それは今のインスタンスメソッドです)。名前の前にself.を追加するだけです。

def self.track_lap_time() 
    ... 
end 

またはclass << selfブロック

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

これは作業用アプリケーションですでに使用されているので、ほとんどのコードを変更する必要があります –

+0

ほとんどのコードを変更したくない場合は、' track_lap_time'インスタンスメソッドこの実装では、 'def track_lap_time(* args); self.class.track_lap_time(* args);終わり; def self.track_lap_time(transponder_token、delta_time_in_ms); ...;終わり – jwieczor

関連する問題