ruby-on-rails 需要文件“file_path”,但没有(Zeitwerk::NameError)

jtw3ybtb  于 2023-10-21  发布在  Ruby
关注(0)|答案(1)|浏览(116)

随着向Redmine 5的过渡(使用Rails 6.1.7.4.),我试图调整自定义插件的代码。我现在在redmine_lutech_integration目录下有这个文件:

#redmine5/plugins/redmine_lutech_integration/lib/redmine_lutech_integration/catalogue_user_format.rb 

module Redmine   
  module FieldFormat     
    class CatalogueUserFormat < RecordList        
      #do stuff     
    end   
  end 
end
  
Redmine::FieldFormat.add 'job', Redmine::FieldFormat::CatalogueUserFormat

这在经典的代码加载器中没有问题,但在Zeitwerk中我得到了:expected file redmine5/plugins/redmine_lutech_integration/lib/redmine_lutech_integration/catalogue_user_format.rb to define constant RedmineLutechIntegration::CatalogueUserFormat, but didn't (Zeitwerk::NameError)
RecordList is a class included in field_format.rb file located in Redmine5/lib/redmine/field_format.rb
是文件结构有问题,还是我在Zeitwerk设置中遗漏了什么?
对于相同插件中其他文件的类似问题,但它们不需要FiledFormat或其他东西,我通过将require File.dirname(__FILE__)+ 'path'添加到插件的init文件来解决它们。

dw1jzc5e

dw1jzc5e1#

关于第一个错误
对于Redmine::FieldFormat::CatalogueUserFormat,您应该创建这样的文件:

# redmine5/plugins/redmine_lutech_integration/lib/redmine/field_format/catalogue_user_format.rb
#                                                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

module Redmine   
  module FieldFormat     
    class CatalogueUserFormat < RecordList        
      #do stuff     
    end   
  end 
end

这是标准的Ruby约定:Namespace::ClassOrModuleName应在namespace/class_or_module_name.rb中定义,CONSTANT_NAME应在constant_name.rb中定义
关于第二个错误
require File.dirname(__FILE__)+ 'path'-可能path是局部变量,而不是文字path字符串

相关问题