【问题标题】:Rails 5 include helper in classRails 5 在类中包含助手
【发布时间】: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


【解决方案1】:

看到有人来这里寻找答案,这就是我所做的:

require 'action_view'

module OurModule
  class CheckReport

    def self.our_method
      start_time = Time.current
      LOGGER.info "OurModule::CheckReport.our_method finished in #{ActionController::Base.helpers.distance_of_time_in_words(start_time, Time.current)}"
    end
  end
end

【讨论】:

  • 谢谢!这就是我所做的。我在控制器中添加了帮助程序调用,使其类似于helper OurModule。我不确定我所做的是否是好的做法,我会尝试你所做的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-06
  • 2020-03-10
  • 1970-01-01
  • 1970-01-01
  • 2017-11-13
相关资源
最近更新 更多