【问题标题】:Rails runner script not workingRails 运行脚本不起作用
【发布时间】:2013-05-03 13:11:38
【问题描述】:

如果我尝试通过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

【问题讨论】:

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


    【解决方案1】:

    你在类上调用一个实例方法,所以它是未定义的。尝试将您的方法改为类方法:

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

    【讨论】:

      【解决方案2】:

      改成

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

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

      【讨论】:

        【解决方案3】:

        将实例方法转换为单例类方法的另一种方法是创建现有类的对象并在运行器中调用实例方法:

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

        【讨论】:

          【解决方案4】:

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

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

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

          否则你可以打电话给ClassName.new.method

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

          DataImport.new.say_hi
          

          Class 和你写的一样。

          【讨论】:

            猜你喜欢
            • 2018-12-21
            • 2013-09-18
            • 2021-03-07
            • 2018-02-15
            • 2017-04-21
            • 2013-01-21
            • 2021-04-24
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多