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静态方法[重复]