gpt4 book ai didi

ruby-on-rails - 首字母缩略词不会正确复数导致循环依赖

转载 作者:行者123 更新时间:2023-12-01 12:43:09 25 4
gpt4 key购买 nike

我想将我的 Controller 命名为 ESCsControllerESC 是相关首字母缩写词。我找到了 Rails inflection 文档,其中描述了实现此目的的方法。

http://api.rubyonrails.org/classes/ActiveSupport/Inflector/Inflections.html

Note: Acronyms that are passed to pluralize will no longer be recognized, since the acronym will not occur as a delimited unit in the pluralized result. To work around this, you must specify the pluralized form as an acronym as well:

acronym 'API'
camelize(pluralize('api')) #=> 'Apis'

acronym 'APIs'
camelize(pluralize('api')) #=> 'APIs'

我在将其添加到 environment.rb

后创建了我的 Controller 和模型
ActiveSupport::Inflector.inflections { |i| 
i.acronym 'ESC'
i.acronym 'ESCs'
}

在控制台中测试这些工作完美。 'ESC'.pluralize() 返回 ESCs 并且 'ESCs'.singularize() 按预期返回 ESC

分别通过rails generate model ESCrails generate controller ESCs生成 Controller 和模型。这按预期创建了 escs_controller.rb 和模型 esc.rb

在我的 routes.rb 我曾经有

resources :ESCs, path: '/parts/escs'

返回此错误:“ESCs”不是受支持的 Controller 名称。这可能会导致潜在的路由问题。请参阅 http://guides.rubyonrails.org/routing.html#specifying-a-controller-to-use

我最终将其更改为:

resources :ESCs, controller: 'escs', path: '/parts/escs'

但是,现在每当我尝试访问一个页面时,我都会遇到循环依赖错误:

Circular dependency detected while autoloading constant EscsController

有人知道这是怎么回事吗?看起来任何试图加载 Controller 的东西都没有看到它应该是 ESCsController 而不是 EscsController。我是 Rails 的新手,所以这可能是一个简单的问题......

我正在使用 Rails 4.0.2

这是完整堆栈跟踪的相关部分。

activesupport (4.0.2) lib/active_support/dependencies.rb:461:in `load_missing_constant'
activesupport (4.0.2) lib/active_support/dependencies.rb:184:in `const_missing'
activesupport (4.0.2) lib/active_support/inflector/methods.rb:226:in `const_get'
activesupport (4.0.2) lib/active_support/inflector/methods.rb:226:in `block in constantize'
activesupport (4.0.2) lib/active_support/inflector/methods.rb:224:in `each'
activesupport (4.0.2) lib/active_support/inflector/methods.rb:224:in `inject'
activesupport (4.0.2) lib/active_support/inflector/methods.rb:224:in `constantize'
activesupport (4.0.2) lib/active_support/dependencies.rb:535:in `get'
activesupport (4.0.2) lib/active_support/dependencies.rb:566:in `constantize'
actionpack (4.0.2) lib/action_dispatch/routing/route_set.rb:76:in `controller_reference'
actionpack (4.0.2) lib/action_dispatch/routing/route_set.rb:66:in `controller'
actionpack (4.0.2) lib/action_dispatch/routing/route_set.rb:44:in `call'
actionpack (4.0.2) lib/action_dispatch/journey/router.rb:71:in `block in call'
actionpack (4.0.2) lib/action_dispatch/journey/router.rb:59:in `each'
actionpack (4.0.2) lib/action_dispatch/journey/router.rb:59:in `call'
actionpack (4.0.2) lib/action_dispatch/routing/route_set.rb:680:in `call'

最佳答案

尝试将添加新变形的代码从 environment.rb 移动到 config/initializers/inflections.rb,然后重新加载服务器。此外,您不需要为路线指定 controller 选项,只需将其设为 resources :escs, path: '/parts/escs' 即可正常工作.

关于ruby-on-rails - 首字母缩略词不会正确复数导致循环依赖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22410011/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com