2011-02-19 41 views
3

任何想法,为什么这不起作用,我得到一个NoMethodError当我尝试通过rails runner运行下面的代码。Rails的亚军脚本不工作

也许我正在错误地调用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 

回答

12

您正在调用该类的实例方法,因此它是未定义的。尝试使你的方法一类方法代替:

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

将其更改为

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

既然你访问它作为一个类的方法,而不是在类的实例的方法,你需要self申报方法作为一个类的方法。

1

的实例方法已经提到的转化的替代进入单例类的方法是创建现有类的一个对象,并调用实例方法在你的亚军:

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

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

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

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

否则,你可以调用像ClassName.new.method

在你的问题,你可以调用像

DataImport.new.say_hi 

而当你写的类保持不变。