【问题标题】:Rails - how to call methods from lib directory?Rails - 如何从 lib 目录调用方法?
【发布时间】:2013-02-27 11:04:25
【问题描述】:

我在 lib 目录中有这个方法(文件my_class_name.rb):

class MyClassName
  def doSomething
    ...
  end
  ...
end

在控制器中:

class UsersController < ApplicationController
  require 'my_class_name'

  def show_stats
    ::MyClassName.doSomething()
  end
end

返回

MyClassName:Class 的未定义方法 `doSomething'

如何正确调用该方法?

【问题讨论】:

    标签: ruby class methods


    【解决方案1】:

    你已经编写了一个带有实例方法的类,所以如果你想以你编写的方式调用它,你需要编写:

      mcn = MyClassName.new
      mcn.doSomething
    

    (通过创建一个实例,然后调用该实例上的方法)

    如果你想要的是一个类方法,定义为:

    class MyClassName
      def self.doSomething
        ...
      end
      ...
    end
    

    并称之为:MyClassName.doSomething

    【讨论】:

      【解决方案2】:
      class MyClassName
        def self.doSomething
          ...
        end
        ...
      end
      

      【讨论】:

        【解决方案3】:

        您已经创建了实例方法而不是类方法,请按如下方式更改您的代码,另外我建议您不要将其作为一个类,而是将其作为一个模块并包含在您的模型中并从模型中调用 doSomething。

        class MyClassName
          def self.doSomething
            ...
          end
          ...
        end
        
        class UsersController < ApplicationController
          require 'my_class_name'
        
          def show_stats
            MyClassName.doSomething()
          end
        end
        

        【讨论】:

          【解决方案4】:

          如果您希望使其按原样工作(只需进行微小的更改),那么您应该创建一个 MyClassName 的实例,例如::MyClassName.new.doSomething()

          class MyClassName
            def doSomething
              ...
            end
            ...
          end
          
          class UsersController < ApplicationController
            require 'my_class_name'
          
            def show_stats
              ::MyClassName.new.doSomething()
            end
          end
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-02-28
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多