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