Ralis 模块和调用静态方法

Posted

技术标签:

【中文标题】Ralis 模块和调用静态方法【英文标题】:Ralis Module and Calling a Static Method 【发布时间】:2020-03-17 22:52:52 【问题描述】:

我正在尝试在 Module 中调用静态方法。

module CoursesHelper

    include ActionView::Helpers::NumberHelper

    def convert(old_price)
        daily_currency = Rails.cache.fetch('daily_currency', expires_in: 12.hours) do
            CurrencyConverter.get_value # <- static. 
        end
        new_price = daily_currency * old_price
        number_to_currency(new_price.round(-2))
    end

end

我在 Rails 项目中做了一些课程。

class CurrencyConverter
    def self.get_value # <- declared as static
        response = RestClient::Request.execute(
            method: :get,
            url: 'https://api.someapicall........'
        )
        value = JSON.parse(response)["rates"]["etc"]
        value
    end
end

我收到了这个错误

uninitialized constant CoursesHelper::CurrencyConverter

这是为什么? 如果这不是最佳实践,您会以 Rails 方式告诉我吗?

编辑

文件夹结构

├── helpers
│   ├── application_helper.rb
│   ├── courses_helper.rb
│   ├── currecy_converter.rb
│   ├── devise_helper.rb
│   ├── introduction_helper.rb
│   ├── orders_helper.rb
│   ├── posts_helper.rb

【问题讨论】:

那个类是在哪里定义的?文件在哪里?问题不在于方法,问题在于没有加载 CurrencyConverter 代码没问题,要么你拼错了一些东西,要么像@arieljuod 说的那样文件结构有误。 我添加了结构。 我不会将文件放在“helpers”文件夹中,所有其他文件都是“_helper.rb”。转换器在那里感觉不对。例如,将其移至 /app/lib,我想这只是一些加载问题。 您能否展示一下您的“CurrencyConverter”文件结构是什么 【参考方案1】:

类 File. 的拼写错误。对不起大家。

currecy_converter.rb

应该是

currency_converter.rb

在我改变它之后。工作正常。文件名在 Rails 中也很重要吗? :(

【讨论】:

以上是关于Ralis 模块和调用静态方法的主要内容,如果未能解决你的问题,请参考以下文章

Python类的特点 :静态方法与类方法

如何通过字符串方法名称在类内调用python静态方法[重复]

静态call 动态call LINK

Python的实例方法,类方法,静态方法之间的区别及调用关系

一个类中直接调用另一个类的静态方法吗

JAVA中"静态方法中不能直接调用非静态的属性和方法"何以理解?举个例子