【问题标题】:Rails 4 engine nested module not being included with uninitialized constant (NameError)Rails 4引擎嵌套模块未包含在未初始化的常量中(NameError)
【发布时间】:2017-05-24 12:09:55
【问题描述】:

我有一个嵌套模块设置为基本辅助方法,它没有包含在使用引擎的应用程序中。

在 lib/mol/blog/blog.rb 中

require "mol/blog/engine"

module Mol
  module Blog
    module Categories
      def self.included(base)
        base.helper_method :categories
      end

      def categories
        Mol::Cms::Category.all
      end
    end
  end
end

在引擎的规范/虚拟应用程序控制器中

class ApplicationController < ActionController::Base
  protect_from_forgery
  include Mol::Blog::Categories
end

这工作正常,类别按预期显示。但是,当我尝试在不同的应用程序中使用引擎时,没有包含类别模块。

在应用的应用控制器中

class ApplicationController < ActionController::Base
  protect_from_forgery with: :exception

  include Mol::Blog::Categories
end

在rails控制台中,错误为uninitialized constant Mol::Blog::Category (NameError)

Mol::Blog 已定义,没有错误或任何东西。为什么无法识别类别模块?

【问题讨论】:

  • 你确定错误是uninitialized constant Mol::Blog::Category (NameError)?。不是uninitialized constant Mol::Blog::Categories (NameError)
  • 是的,它是未初始化的常量 Mol::Blog::Categories (NameError),对不起我的错误

标签: ruby-on-rails rails-engines


【解决方案1】:

您的应用不知道Mol::Blog::Categories 模块。您应该在 "mol/blog/engine.rb" 文件或 "mol/blog.rb" 文件中要求它。

# mol/blog.rb

require "mol/blog/categories"    

module Mol
  module Blog
   # ...
  end
end

【讨论】:

  • 谢谢,但我已经尝试过了,没有任何区别。我想知道由于 gem 被称为 mol-blog 它是否正在寻找 mol-blog/ 而不是 mol/blog 的路径
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-01
  • 1970-01-01
  • 2017-03-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多