2015-10-29 2 views
0

Я получил задание cron в своем проекте, это задание выполнило модель.метод класса из экземпляра в модели

class Example < ActiveRecord::Base 
    def self.test 
     number = getNumber(1) 
    end 

    def getNumber(i) 
     value = 2 + i 
     return value 
    end 
end 

Как получить доступ к функции getNumber?

+0

Вы пытались добавить ключевое слово 'self' перед вызовом' getNumber (1) 'в свой метод' self.test'? Напр. 'number = self.getNumber (1)' –

+0

И затем попробуйте называть его с помощью 'Example.test' –

+0

' getNumber' выглядит без гражданства. Почему это не классный метод? –

ответ

0

В пределах self.test вы находитесь в классе (не в данном случае). Когда вы вызываете getNumber Ruby будет искать метод класса. То, что вы имеете выше, является методом экземпляра. Если вы измените свой код с def getNumber(i) на def self.getNumber(i), он будет делать то, что вы хотите.

class Example < ActiveRecord::Base 
    def self.test 
    number = getNumber(1) 
    end 

    def self.getNumber(i) 
    value = 2 + i 
    return value 
    end 
end 

puts Example.test 

При запуске будет выдаваться 3.

1

Ваш метод getNumber (который должен быть get_number) является методом экземпляра, так что вам нужно будет позвонить Example.new.get_number(1), однако, как уже отмечалось другими он является лицом без гражданства, так может быть также метод класса, так что это будет работать:

class Example < ActiveRecord::Base 
    def self.test 
    number = get_number(1) 
    end 

    def self.get_number(i) 
    value = 2 + i 
    return value 
    end 
end 
+0

Или просто 'def self.get_number (i); 2 + i; end' :) –

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