我遇到模块名称和文件夹结构问题。
我有一个定义为
的模型module API
module RESTv2
class User
end
end
end
文件夹结构类似于
models/api/restv2/user.rb
当试图访问该类时,我得到一个未初始化的常量错误。但是,如果我将模块名称更改为REST并将文件夹更改为/ rest,则不会收到错误。
我认为问题与文件夹的命名有关,我尝试过/ rest_v_2,/ rest_v2,/ restv_2等所有不同的组合。
有什么建议吗?
答案 0 :(得分:8)
在模块或类名称上使用'{3}}'下划线'方法来尝试找出当它遇到一个尚不知道的常量时要加载的文件。当您通过此方法运行模块时,它似乎没有给出最直观的结果:
irb(main):001:0> "RESTv2".underscore
=> "res_tv2"
我不确定为什么下划线做出这个选择,但我打赌将你的模块dir重命名为上面会修复你的问题(虽然我想我更喜欢将它重命名为“RestV2或RESTV2所以目录名称是理智的)。
答案 1 :(得分:5)
您需要在app / model目录的子目录中将Rails配置为自动加载。把它放在你的config / application.rb中:
config.autoload_paths += Dir["#{config.root}/app/models/**/"]
然后你应该能够自动加载这些文件。
此外,您可能的文件名必须是app / model / api / res_tv2 / user.rb,因为Rails使用String.underscore来确定文件名。我只是称它为API :: V2 :: User以避免头痛,除非你有多种类型的API。