2016-05-18 59 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

如果你在模型裏面調用你所看到的'self.completed_mission_names',如果在控制器或視圖中,然後是'MenteeProfile.completed_mission_names' – 7urkm3n

+0

將調用移動到類定義的底部。或者更好,外面。類定義之後就好了。在Rails初始化文件('config/initializers/whatever.rb')中調用該方法會更好(假設您要執行一次性初始化)。 – Raffael

+0

以下Tim mee的答案和線程共享後,我已經把我想要在Class中調用的方法,工作得更好。謝謝大家的迴應。 –

回答

2

簡化到了極致,你試圖做到這一點:

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

,因爲當你嘗試調用它的方法foo沒有定義這是行不通的。你必須先定義它,然後你可以調用它。像這樣:

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

你也可以只foo,而不是B.foo從類定義中調用。您可以隨心所欲地添加受保護的關鍵字,它不會對任何類方法產生任何影響。