Скрипт Rails Runner не работает - PullRequest
       1

Скрипт Rails Runner не работает

3 голосов
/ 20 февраля 2011

Любые идеи, почему это не работает, я получаю NoMethodError, когда я пытаюсь запустить приведенный ниже код через rails runner.

Возможно, я неправильно называю бегуна рельсов, извините, новинка в Rails!

Расположение файла:

/app/scripts/data_import.rb

Команда:

rails runner -e development DataImport.say_hi

Ошибка:

undefined method `say_hi' for DataImport:Class (NoMethodError)

Код:

class DataImport

  def say_hi
    puts "hi"
  end

end

Ответы [ 4 ]

12 голосов
/ 20 февраля 2011

Вы вызываете метод экземпляра для класса, поэтому он не определен.Попробуйте вместо этого сделать ваш метод классовым:

class DataImport
  def self.say_hi
    puts "hi"
  end
end
5 голосов
/ 20 февраля 2011

Измените его на

class DataImport
  def self.say_hi
    puts "hi"
  end
end

Поскольку вы обращаетесь к нему как к методу класса, а не к методу экземпляра класса, вам нужно self, чтобы объявить метод как метод класса.

1 голос
/ 20 февраля 2011

Альтернативой уже упомянутому преобразованию метода экземпляра в метод класса singleton является создание объекта существующего класса и вызов метода экземпляра в вашем средстве выполнения:

rails runner -e development "import = DataImport.new; import.say_hi"
0 голосов
/ 03 мая 2013

Ответ: многие друзья уже опубликовали это.

class DataImport
  def self.say_hi
   puts "hi"
  end
end

И причина в том, что если у вас есть класс и метод без себя. , Вы не можете вызывать класс как ClassName.method. Вы можете вызывать так, если только метод является методом self этого класса.

В противном случае вы можете позвонить как ClassName.new.method.

В вашей проблеме вы можете позвонить как

DataImport.new.say_hi

И Класс остается таким же, как вы написали.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...