在我的 Rails 应用程序中,我像这样自由地使用类命名空间:
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
不幸的是,ruby 解释器一直认为我的命名空间嵌入函数是其他类命名空间的一部分,并且会引发uninitialized constant
错误。即在运行时我收到这样的错误
uninitialized constant Person::Shared::Property
基本上,解释器正在查看此函数Shared::Property::HasOne::Update
并将其视为在Person
名称空间中,当它不在时,然后抛出错误。
我可以通过明确说明该函数在Object
命名空间中来解决这个问题,就像这样Object::Shared::Property::HasOne::Update
,但是到处添加Object::
既烦人又丑陋。有没有人知道的更好的解决方案?没有重写我所有的类名/命名空间。
我想问题的一部分是它Person::Shared
是一个有效的命名空间,因此 ruby 解释器开始处理Shared::Property:: ...
引用,就像我刚刚忘记添加Person
到开头一样。
我真的很感谢任何反馈!