2011-02-19 34 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 

而當你寫的類保持不變。