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

Если ур внутри модели просто вызывается как u, см. 'Self.completed_mission_names', если yr в контроллере или в представлении, то' MenteeProfile.completed_mission_names' – 7urkm3n

+0

Переместите вызов в нижней части определения класса. Или еще лучше, снаружи. Сразу после определения класса будет хорошо. Вызов метода в файле инициализации Rails ('config/initializers/whatever.rb') будет еще лучше (если вы хотите выполнить однократную инициализацию). – Raffael

+0

После ответа Тима и ответа на поток, я поместил метод, который я хотел вызвать внутри класса, работает намного лучше. Спасибо всем за ваши ответы. –

ответ

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 внутри определения класса. Вы можете добавить защищенное ключевое слово везде, где захотите, оно не окажет никакого влияния на методы класса.

Смежные вопросы