我有檔案夾內幕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用空模塊定義檔案,但沒有用。
uj5u.com熱心網友回復:
兩個版本都不一樣。
module Clients
class Show
在命名空間中定義一個具有名稱Clients 和類的模塊。但ShowClients
class Clients::Show
只Show在命名空間中定義一個類Clients。Clients在這種情況下,不會自動定義名稱的模塊。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/361358.html
上一篇:在PHP中檢索用戶的AD組
