【发布时间】:2020-04-24 16:28:06
【问题描述】:
我们正在从 Rails 4.2 迁移到 5.2。以下代码在 4.2 中可以正常工作,但在 5 中无法正常工作
require 'action_view'
module OurModule
class CheckReport
include ActionView::Helpers::DateHelper
def self.our_method
start_time = Time.current
LOGGER.info "OurModule::CheckReport.our_method finished in #{distance_of_time_in_words(start_time, Time.current)}"
end
end
end
但在 Rails 5 中,我们得到了:
NoMethodError: undefined method `distance_of_time_in_words' for OurModule::CheckReport:Class
这似乎是因为这些是类方法而不是实例方法。
那么,为什么它可以在 Rails 4(相同的 ruby 版本 - 2.4.9)中工作,我们可以做些什么来修复它(除了将所有这些案例都设为实例方法?)
【问题讨论】:
-
我认为这个问题有答案。 stackoverflow.com/questions/9573628/…
-
这可能会有所帮助。 stackoverflow.com/questions/489641/…
-
谢谢,但这些问题都没有解决任何一个问题(为什么上面的代码在 Rails 4 中完美运行以及在 Rails 5 中做什么)。第一个问题/答案(stackoverflow.com/questions/9573628/…)是我获得上述代码的地方。第二个问题/答案基本上(stackoverflow.com/questions/489641/…)说不要“包含”,而是直接调用助手,这是一种完全不同的做事方式。
-
@phil 您是否碰巧找到了解决问题的方法?我刚刚也将我的 rails 升级到了 5.2,并且视图中的所有辅助方法都失败了,错误
NoMethodError - undefined method for #<#<Class:0x00007f998a8869b0>:0x00007f998a87da68> -
@KedarnagMukanahallipatna - 我发布了一个答案。希望有帮助
标签: ruby-on-rails ruby-on-rails-5.2