Ruby on rails 其他类中的命名空间类引用会生成未初始化的常量错误
在我的Rails应用程序中,我自由地使用了类名称空间,如下所示:Ruby on rails 其他类中的命名空间类引用会生成未初始化的常量错误,ruby-on-rails,ruby,trailblazer,Ruby On Rails,Ruby,Trailblazer,在我的Rails应用程序中,我自由地使用了类名称空间,如下所示: class Person class PrimaryEmailAddress class Update < Trailblazer::Operation def persist(options, **) Shared::Property::HasOne::Update.( {property_class: PrimaryEmailAddress, property
class Person
class PrimaryEmailAddress
class Update < Trailblazer::Operation
def persist(options, **)
Shared::Property::HasOne::Update.(
{property_class: PrimaryEmailAddress, property_value: @params[:email_address]},
'current_user' => self['current_user'], parent_node: options[:person])
end
end
end
end
基本上,解释器正在查看此函数Shared::Property::HasOne::Update
,并将其视为Person
命名空间中的函数,而不是,然后抛出一个错误
我可以通过明确说明函数位于对象
名称空间中来绕过这个问题,就像对象::共享::属性::HasOne::更新
,但是到处添加对象::
既烦人又难看。有没有更好的解决方案?没有重写我所有的类名/名称空间
我想部分问题在于Person::Shared
是一个有效的名称空间,因此ruby解释器开始处理Shared::Property::…
引用,就像我忘记在开头添加Person
一样
我真的很感激任何反馈 找到了答案:通过在类引用前面添加
:
,我强制ruby解释器查看顶级名称空间。i、 e.我可以做的不是Object::Shared::Property::HasOne::Update
,而是::Shared::Property::HasOne::Update
,我觉得这样更可读
虽然有很多关于未初始化常量问题的问题,但我很难找到这个答案,因为我发现的所有问题都是在特定情况下提出的,而不是一般化的。这似乎是一个重复的问题,我只是没有找到另一个,但我将在这里发布这个QA,以防我错了,这有助于其他人遇到同样的问题
最后我找到了正确的答案。尝试添加
::共享…
的可能重复项
uninitialized constant Person::Shared::Property