实例化类时提供未初始化常量



>我在 Rails 应用程序中在应用程序/数据表的文件夹结构下创建了一个新类

该类保存在此目录中的文件中,并保存为 DatasetIndexDatatable.rb

类文件的内容如下所示:

class DatasetIndexDatatable
  delegate :params, :h, :link_to, :number_to_currency, to: :@view
  def initialize(view)
    @view = view
  end
end

当我尝试从应用程序中的控制器实例化此类时,Rails 给出了一个错误:

uninitialized constant DatadescriptionController::DatasetIndexDatatable

控制器中尝试实例化新类的代码如下所示:

class DatadescriptionController < ApplicationController
  layout "datadescription"
  def index
respond_to do |format|
        format.html
        format.json { render json: DatasetIndexDatatable.new(view_context) }
    end
  end
end

为什么 Rails 看不到新类? 我尝试将包含该类的文件夹添加到 application.rb 中的 config.autoload_paths 变量中:

config.autoload_paths += %W(#{config.root}/lib
                            #{config.root}/datatables)

但会发生相同的错误。 我还尝试使用全局命名空间在控制器中实例化新类:

format.json { render json: ::DatasetIndexDatatable.new(view_context) }

并使用类的包含文件夹作为命名空间:

format.json { render json: Datatables::DatasetIndexDatatable.new(view_context) }

一切都无济于事。 我做错了什么?

文件命名不正确。而不是:

DatasetIndexDatatable.rb

称之为:

dataset_index_datatable.rb

这是 Rails 标准的命名约定。如果定义 CamelCase 类,则包含该定义的文件应命名为 camel_case.rb 小写,带下划线(也称为蛇大小写(。

最新更新