Rails runner脚本无法正常工作

任何想法为什么这不起作用,当我尝试通过rails runner运行下面的代码时,我得到一个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 

您正在类上调用实例方法,因此它未定义。 尝试将您的方法改为类方法:

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

将其更改为

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

由于您将其作为类方法而不是类的实例上的方法进行访问,因此您需要self将该方法声明为类方法。

已经提到的将实例方法转换为单例类的方法的替代方法是创建现有类的对象并在运行器中调用实例方法:

 rails runner -e development "import = DataImport.new; import.say_hi" 

答案是,很多朋友已经发布了。

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

原因是,如果你有一个没有自我的阶级和方法。 ,你不能像ClassName.method那样调用类。 你可以像这样调用如果只有方法是该类的自我方法。

否则你可以像ClassName.new.method一样调用。

在你的问题中,你可以打电话

 DataImport.new.say_hi 

class级和你写的一样。