0

我有文件夹内幕test/fixtures/schemas,我在其中定义了一些用于验证某些控制器的 JSON 响应的模式,如下所示:

test
  |
  |
  controllers
  |
  |
  ....
  fixtures
         |
         |
         organizations.yml
         |
         |
         schemas
               |
               |
               clients
                     |
                     |
                     show.rb
               |
               |
               organizations
               ...

下面的文件fixtures/schemas/client/show.rb如下所示:

module Clients
  class Show < Dry::Validation::Contract
    json do
      required(:id).filled(:string)
      required(:state).filled(:string)
...

它工作正常,我可以在我的测试中使用这个模式,Clients::Show但我们还有一个 rubocop 规则,它强制我们使用紧凑的模块和类样式,如下所示:

class Clients::Show < Dry::Validation::Contract

但是当我这样定义它时,我得到一个NameError

test/fixtures/schemas/client/show.rb:3:in `<top (required)>': uninitialized constant Client (NameError)

我觉得奇怪的是一种结构有效而另一种无效。我通读了 Zeitwerk 手册,但无法解释我的问题,并尝试了不同的方法,例如client.rb使用空模块定义文件,但它不起作用。

4

1 回答 1

1

两个版本都不一样。

module Clients
  class Show

在命名空间中定义一个具有名称Clients 类的模块。但ShowClients

class Clients::Show

Show只在命名空间中定义了一个类ClientsClients在这种情况下,没有自动定义名称的模块。

于 2021-11-19T18:09:04.370 回答