【问题标题】:Rails autoloading fully capitalized name like APIRails 自动加载完全大写的名称,如 API
【发布时间】:2015-05-13 11:16:24
【问题描述】:

我有一些结构

  • /lib/dokuwiki.rb
  • /lib/dokuwiki/exception.rb
  • /lib/dokuwiki/api/connection.rb

dokuwiki.rb

require 'dokuwiki/exception.rb'

module Dokuwiki
  ...

dokuwiki/api/connection.rb

module Dokuwiki
  module API
    class Connection
      ...

现在,当我尝试从控制器调用Dokuwiki::API::Connection.new(没有任何require)时,Rails 默认常量自动加载失败。我相信这是因为 ::API 模块应该有一个名为 /a_p_i/ 而不是 /api/ 的文件夹,但这很难看。

当然,我可以在主“/lib/dokuwiki.rb”文件中要求“dokuwiki/api/connection.rb”,但它不会自动重新加载此类(这在开发环境中有点烦人)

我可以做些什么来保持漂亮的/api/ 文件夹名称,并能够对/lib/dokuwiki/api/connection.rb 进行一些实时修改而无需重新启动我的服务器?

【问题讨论】:

    标签: ruby-on-rails ruby constants


    【解决方案1】:

    有一个文件叫config/initializers/inflections.rb

    添加进去

    ActiveSupport::Inflector.inflections do |inflect|
      inflect.acronym 'API' 
    end
    

    API 命名空间将作为一个名为 api 的目录提供

    【讨论】:

    • 喜欢这个。我添加了 inflect.acronym 'SMS' 并且我在我的应用程序中处理 SMS 的所有东西都按预期工作。这是一件坏事/非常规的事情吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-06
    • 2014-01-26
    • 1970-01-01
    • 2017-08-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多