Ruby on rails Rails模块/文件夹命名约定

Ruby on rails Rails模块/文件夹命名约定,ruby-on-rails,Ruby On Rails,我的模块名和文件夹结构有问题 我有一个模型定义为 module API module RESTv2 class User end end end 文件夹结构如下所示 models/api/restv2/user.rb 当尝试访问该类时,我得到一个未初始化的常量错误。但是,如果我将模块名更改为REST,将文件夹更改为/REST,则不会出现错误 我假设问题与文件夹的命名有关,我尝试了所有不同的/rest\u v\u 2、/rest\u v2、/restv\u 2组合,等等

我的模块名和文件夹结构有问题

我有一个模型定义为

module API
  module RESTv2
    class User
    end
  end
end
文件夹结构如下所示

models/api/restv2/user.rb
当尝试访问该类时,我得到一个未初始化的常量错误。但是,如果我将模块名更改为REST,将文件夹更改为/REST,则不会出现错误

我假设问题与文件夹的命名有关,我尝试了所有不同的/rest\u v\u 2、/rest\u v2、/restv\u 2组合,等等


有什么建议吗?

您需要将Rails配置为自动加载到app/model目录的子目录中。将其放在config/application.rb中:

config.autoload_paths += Dir["#{config.root}/app/models/**/"]
然后您应该能够自动加载这些文件

此外,您可能的文件名必须是app/model/api/res_tv2/user.rb,因为Rails使用String.下划线来确定文件名。除非有不止一种类型的API,否则我只想将其称为API::V2::User以避免麻烦。

对模块或类名使用“下划线”方法,以便在遇到未知常量时尝试确定要加载的文件。当您通过此方法运行模块时,它似乎不会给出最直观的结果:

"RESTv2".underscore
# => "res_tv2"

我不知道为什么下划线会做出这样的选择,但我打赌将模块dir重命名为上面的将解决您的问题(尽管我认为我更喜欢将其重命名为“RestV2或RestV2,以便目录名正常).

按照Rails惯例,您的模块命名不正确。
RESTv2
应该是
RESTv2
。这实际上很有道理,因为字符串
RESTv2
不符合惯例。假设第一个单词是类似于“PIN”的首字母缩略词,第二个单词是类似于“Importer”的大写单词“:
PINImporter
=>
pin\u importer
UUIDGenerator
=>
uuid\u generator
aescoller
RESTv2
resu tv2
,等等。在所有CamelCase转换的情况下,它都不是“CamelC ase”,而是“CamelCase”。空格是在最后一个大写字母之前插入的,而不是在后面。我怀疑是“v”的大小写导致了“T”之前的单词中断。如果你像我一样是一个特殊的noob,请确保你使用的是
rails控制台
,而不是
irb