在实例化类时,Rails未初始化为常量

时间:2013-10-09 16:05:04

标签: ruby-on-rails ruby ruby-on-rails-3

我在app / datatables

的文件夹结构下的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) }

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

1 个答案:

答案 0 :(得分:14)

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

DatasetIndexDatatable.rb

称之为:

dataset_index_datatable.rb

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