2016-05-18 68 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从类定义中调用。您可以随心所欲地添加受保护的关键字,它不会对任何类方法产生任何影响。