4

我在我的 Rails 应用程序中的 app/datatables 文件夹结构下创建了一个新类

该类保存在此目录中的文件中,并保存为 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) }

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

4

1 回答 1

18

文件名称不正确。代替:

DatasetIndexDatatable.rb

叫它:

dataset_index_datatable.rb

这是 Rails 标准命名约定。如果您定义一个CamelCase类,则包含定义的文件应命名camel_case.rb为小写并带有下划线(又名蛇形大小写)。

于 2013-10-09T16:14:18.170 回答