Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 控制器中找不到Rails 5自定义模块功能_Ruby On Rails_Ruby On Rails 5 - Fatal编程技术网

Ruby on rails 控制器中找不到Rails 5自定义模块功能

Ruby on rails 控制器中找不到Rails 5自定义模块功能,ruby-on-rails,ruby-on-rails-5,Ruby On Rails,Ruby On Rails 5,我有一个Rails 5应用程序和自定义模块存储在lib/reusible.rb module Reusable def createCharge(amount, source, description, customer) charge_params = { amount: amount, source: source, description: description,

我有一个Rails 5应用程序和自定义模块存储在
lib/reusible.rb

module Reusable

    def createCharge(amount, source, description, customer)

        charge_params = {
            amount: amount,
            source: source,
            description: description,
            currency: 'usd'
        }

        return charge_params
    end
end
我已将以下内容添加到
application.rb

config.autoload_paths << "#{Rails.root}/lib"
config.eager_load_paths << "#{Rails.root}/lib"
但在我的控制器中,我不能做同样的事情。当我尝试以下方法时:

2.3.4 :002 > include Reusable
 => Object
2.3.4 :003 > x = Reusable.createCharge(100, 1, "ffwefwef")
{
         :amount => 100,
         :source => 1,
    :description => "ffwefwef",
       :currency => "usd"
}
class ChargesController < ApplicationController
    before_action :authenticate_user!, only: [:new, :create]
    before_action :set_client, only: [:new, :create]
    before_action :set_order, only: [:create]

    include Reusable

    def create
        charge_attempt = Reusable.createCharge(total, token, description, customer)
    end
end

知道它为什么找不到函数吗?我重新启动了我的应用程序,并将
可重复使用的方法打印到我的控制台,但该功能不在那里。

有几种不同的方法使您的
createCharge
方法可用

一种方法是
模块功能

module Reusable
  def create_charge(amount, source, description, customer)
    charge_params = {
      amount: amount,
      source: source,
      description: description,
      currency: 'usd'
    }
    charge_params
  end

  module_function :create_charge
end
另一种方法是使用自我

def self.create_charge(amount, source, description, customer)

看起来你们都在将
可重用的
混合到你们的类中,并直接调用这个方法。一般来说,你只需要做一个或另一个。如果混合使用,则可以直接调用它,而无需
重复使用。
charge\u trunt=createCharge(总计、令牌、描述、客户)
。如果要直接调用它,则需要在
可重用
上将其定义为单例方法
module\u function
可以为您做到这一点,如果您愿意,您可以同时使用这两种方法。使用
module\u function
而不是
def self.
有什么好处?实际上,当您包含模块时,有一个微妙的区别:它是作为私有实例方法复制的。因此,它的使用方式稍微灵活一些。另见
def self.create_charge(amount, source, description, customer)