Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 其他类中的命名空间类引用会生成未初始化的常量错误_Ruby On Rails_Ruby_Trailblazer - Fatal编程技术网

Ruby on 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

在我的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
基本上,解释器正在查看此函数
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