【问题标题】:Rails helper enum to view uninitialized constant issueRails 助手枚举查看未初始化的常量问题
【发布时间】:2016-01-25 16:50:07
【问题描述】:

我不断得到

uninitialized constant ActionView::CompiledTemplates::BLAHBLAH1

当我在 erb 文件中使用 BLAHBLAH1 时,它不起作用,但如果我在它前面加上助手名称 BlahBlahHelper::BLAHBLAH1 它就可以工作。 助手是blahblah_helper.erb,内容为:

module BlahBlahHelper
  BLAHBLAH1 = 0
end

视图的文件名为blah_blah.html.erb。我知道我有正确的视图命名约定,因为我已经测试过了。

助手位于视图的子目录中会不会有问题?

有没有办法让它工作而不必在助手名称前加上前缀?

【问题讨论】:

  • @AndreyDeineko 我得到uninitialized constant BLAHBLAH1
  • 控制器名称是什么?除非它是 BlahBlahsController 并且您使用的是预期行为的特定 Rails 版本!
  • @MichalSzyndel 我正在使用reports_controller.rb,但这会呈现视图文件。错误发生在视图中。
  • 尝试将helper BlahBlahHelper 放在reports_controllerclass 之后

标签: ruby-on-rails ruby ruby-on-rails-4 enums constants


【解决方案1】:

只有当助手模块的名称与控制器名称匹配时,它才会自动加载。

所以在你的情况下,你有两个选择:

1)

include BlahBlahHelper # in controller, same as `helper BlahBlahHelper`

2)

将控制器重命名为BlahBlahController

好的,正如 edikgat 试图在 cmets 中指出的那样,这里的问题是常量解析。

要使用一个常量,你必须用全名引用它,因为常量不包含在模块中,只有它的方法。

阅读 this guide 在 Rails 中加载的常量。

【讨论】:

  • 绝对没有。所有帮助器都包含在所有视图类中,您可以在视图中执行“self.class.ancestors”以确保
  • @edikgat 我无法真正理解您所写的内容。你可以用俄语写可能 - 这样至少我明白你想说什么。 + 请解释你的反对意见(因为,正如我所说 - 我不明白你的意思)
  • 1)хелперывключаютсявовсеанонимныеклассывьюхбезотносительнокихименам - этооднаизпричинпочемуихнестоитширокоиспользовать2)константыникуданевключаются。 Механизм поиска констант в руби отличается от механизма поиска методов。 там суть в том что костанта будет искаться в более глобальном пространстве имен, если не была найдена в локальном, итд
  • @AndreyDeineko 在俄语如你所愿
  • @edikgat 在您之前的评论编辑之后,我明白了这一点。关于 Ruby 中的常量解析机制 - 我知道,只是我不知何故错过了常量的问题,并回答好像问题出在方法上。
【解决方案2】:

发生这种情况是因为像其他模块这样的帮助程序被包含在仅查看它们的方法中。没有办法包含常量

【讨论】:

    猜你喜欢
    • 2010-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多