2016-05-18 8 views
-1

モデル内で定義されているメソッドをトリガーしようとしています。しかし、私は私のサーバーを起動しようとすると "未定義のメソッド` completed_mission_names 'を取得しています。誰でも私が間違っていることを見つけるのを助けることができますか?最大に簡素化されたモデル内でメソッドを呼び出す

class MenteeProfile < ActiveRecord::Base 

    # Update trackable attributes with succeeded missions 
    MenteeProfile.completed_mission_names 

protected 

    def last_completed_mission_action 
    end 

    def self.completed_mission_names 
    end 
end 
+0

yrがモデルの場合は、 'self.completed_mission_names'を参照してください。コントローラーまたはビューのyrの場合は、' MenteeProfile.completed_mission_names' – 7urkm3n

+0

呼び出しをクラス定義の最後に移動します。または、さらに良い、外に。クラス定義の直後は問題ありません。 Railsのイニシャライザファイル( 'config/initializers/whatever.rb')でメソッドを呼び出すと、一回の初期化を実行することを前提として、さらにうまくいくでしょう。 – Raffael

+0

Tim meeの答えとスレッドを共有した後、クラス内で呼びたいメソッドを入れました。皆様のご返信ありがとうございます。 –

答えて

2

、あなたはこれをやろうとしている:あなたはそれを起動しようとする方法fooが定義されていないため

class A 
    A.foo 
    def self.foo 
    puts 'Calling foo!' 
    end 
end 

これは動作しません。最初に定義する必要があります。それを呼び出すことができます。これと同じように:

class B 
    def self.foo 
    puts 'Calling foo!' 
    end 
    B.foo 
end 

また、単にfoo代わりのB.fooクラス定義内から呼び出すことができます。保護されたキーワードを好きな場所に追加することができます。クラスメソッドには何の影響もありません。

関連する問題