NameError - rails 4中未初始化的常量错误

时间:2014-01-13 15:36:54

标签: ruby-on-rails include require

我在“ProgramsController.rb”文件中有以下代码,其中,我使用名为“DataTableDelegate”的类,该类位于一个名为“datatable_delegate.rb”的单独文件中

 # GET /programs
 # GET /programs.json
 def index
    puts "Running Program/index"
puts "Model name = #{controller_name.classify}"
respond_to do |format|
    format.html
@datatable_options = generate_datatable_hash(view_context, controller_name.classify, Program.data_table_attribute_array )
log_with_blue("============================================")
log_with_yellow("#{@datatable_options.inspect}")
log_with_blue("============================================")
>>>>>> format.json { render json: DataTableDelegate.new( @datatable_options)  }
   end
   end

文件“datatable_delegate.rb”位于

 app/datatables/datatable_delegate.rb

当我在浏览器中加载程序URL时,我在日志中得到以下内容:

在237ms完成500

 NameError - uninitialized constant ProgramsController::DataTableDelegate:
 activesupport (4.0.0) lib/active_support/dependencies.rb:500:in `load_missing_constant'
 activesupport (4.0.0) lib/active_support/dependencies.rb:183:in `const_missing'
 app/controllers/programs_controller.rb:22:in `block (2 levels) in index'
 actionpack (4.0.0) lib/action_controller/metal/mime_responds.rb:191:in `respond_to'
 app/controllers/programs_controller.rb:13:in `index'
 actionpack (4.0.0) lib/action_controller/metal/implicit_render.rb:4:in `send_action'
 actionpack (4.0.0) lib/abstract_controller/base.rb:189:in `process_action'
 ......

我试图在我的程序控制器文件中放入一个require语句,但我仍然收到错误.....

我该怎么办?

由于

2 个答案:

答案 0 :(得分:2)

require中不需要ProgramsController语句,因为app/目录中的所有文件都由Rails自动加载。

问题在于您访问DataTableDelegate的方式。它以Datatable命名,因此此文件的位置位于app/datatables/目录中。

尝试以下方法:

::Datatable::DatatableDelegate.new( @datatable_options)

请注意上面模块和类名中的字符大小写。

答案 1 :(得分:0)

将您的文件重命名为'data_table_delegate.rb'。同时检查路径app/datatables是否在autoload_paths