Rails runner脚本不起作用

时间:2011-02-19 21:03:44

标签: ruby-on-rails ruby ruby-on-rails-3

为什么这不起作用的任何想法,当我尝试通过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

4 个答案:

答案 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

班级和你写的一样。