Rails模块/文件夹命名约定

时间:2013-06-17 14:29:15

标签: ruby-on-rails

我遇到模块名称和文件夹结构问题。

我有一个定义为

的模型
module API
  module RESTv2
    class User
    end
  end
end

文件夹结构类似于

models/api/restv2/user.rb

当试图访问该类时,我得到一个未初始化的常量错误。但是,如果我将模块名称更改为REST并将文件夹更改为/ rest,则不会收到错误。

我认为问题与文件夹的命名有关,我尝试过/ rest_v_2,/ rest_v2,/ restv_2等所有不同的组合。

有什么建议吗?

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。