Ruby on rails 控制器中找不到Rails 5自定义模块功能
我有一个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,
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)