为什么这不起作用的任何想法,当我尝试通过NoMethodError
运行以下代码时,我得到rails runner
。
也许我错误地调用了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
答案 0 :(得分:12)
您正在调用类的实例方法,因此它未定义。尝试将您的方法改为类方法:
class DataImport
def self.say_hi
puts "hi"
end
end
答案 1 :(得分:5)
将其更改为
class DataImport
def self.say_hi
puts "hi"
end
end
由于您是以类方法而不是类的实例方式访问它,因此需要self
将方法声明为类方法。
答案 2 :(得分:1)
已经提到的将实例方法转换为单例类方法的替代方法是创建现有类的对象并在运行器中调用实例方法:
rails runner -e development "import = DataImport.new; import.say_hi"
答案 3 :(得分:0)
答案是,很多朋友已经发布了。
class DataImport
def self.say_hi
puts "hi"
end
end
原因是,如果你有一个没有自我的阶级和方法。 ,你不能像ClassName.method那样调用类。你可以像这样调用如果只有方法是该类的自我方法。
否则你可以像ClassName.new.method
一样打电话。
在您的问题中,您可以像
一样打电话DataImport.new.say_hi
班级和你写的一样。