代码之家  ›  专栏  ›  技术社区  ›  Jeremy Thomas

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

  •  0
  • Jeremy Thomas  · 技术社区  · 7 年前

    我有一个Rails 5应用程序和自定义模块存储在 lib/reusable.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
    

    NoMethodError (undefined method `createCharge' for Reusable:Module):
    

    知道它为什么找不到函数吗?我已重新启动应用程序并打印 Reusable.methods 到我的控制台,功能不在那里。

    1 回复  |  直到 7 年前
        1
  •  2
  •   Mark Merritt    7 年前

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

    一种方法是 module_function ...

    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)