【发布时间】:2016-07-27 06:27:23
【问题描述】:
Ruby 2.3.0
Rails 4.2.5.1
/app/decorators/api/v1/custom_namespace/xyz_decorator.rb
module Api
module V1
class CustomNamespace::XyzDecorator < CustomDelegator
end
end
end
/app/decorators/api/v1/abc_decorator.rb
module Api
module V1
class AbcDecorator < CustomDelegator
def xyz_decorator
CustomNamespace::XyzDecorator.new
end
end
end
end
当AbcDecorator 实例尝试访问xyz_decorator 时,代码因错误而中断
NameError:
uninitialized constant CustomNamespace::XyzDecorator
我期待CustomNamespace::XyzDecorator 在Api::V1::AbcDecorator#xyz_decorator 方法中被解析为Api::V1::CustomNamespace::XyzDecorator。
我尝试通过以下方式修改
/app/decorators/api/v1/custom_namespace/xyz_decorator.rb,但还是同样的错误:
module Api
module V1
module CustomNamespace
class XyzDecorator < CustomDelegator
end
end
end
end
当我使用如下代码所示的完全限定名称时,它可以工作。
/app/decorators/api/v1/abc_decorator.rb
module Api
module V1
class AbcDecorator < CustomDelegator
def xyz_decorator
Api::V1::CustomNamespace::XyzDecorator.new
end
end
end
end
谁能让我了解发生了什么以及为什么我的第一个版本的代码不起作用?
P.S:没有定义明确定义模块的此类文件:
/app/decorators/api.rb
module Api
end
/app/decorators/api/v1.rb
module Api
module V1
end
end
/app/decorators/api/v1/custom_namespace.rb
module Api
module V1
module CustomNamespace
end
end
end
【问题讨论】:
标签: ruby ruby-on-rails-4 model-view-controller nameerror