1

我的环境:

  • 导轨 3.2.8
  • 红宝石 1.9.3p194
  • Fedora 16 x86_64

这个问题似乎是 Rails 引擎特有的。

似乎HttpHelpers在 Rails 引擎的路由文件中使用时,我在通过浏览器访问路由时得到“未初始化的常量控制器”。但是,如果我在引擎的路由文件中使用 URL 匹配器,它会正确路由。

以下是我创建失败示例的方法:

$ rails plugin new my_engine --mountable
$ cd my_engine
$ rails g controller things index
$ rails s -p 3005

控制器生成器HttpHelpers#get默认使用该方法,因此此时 Rails 引擎的config/routes.rb文件如下所示:

MyEngine::Engine.routes.draw do
  get "things/index"

end

而且,test/dummy应用程序的config/routes.rb文件如下所示:

Rails.application.routes.draw do

  mount MyEngine::Engine => "/my_engine"
end

所以,我应该能够从引擎中点击http://locahost:3005/my_engine/things/index并查看Things#index视图。但是,我在浏览器中看到:

路由错误

未初始化的常量 ThingsController

如果我手动将引擎的config/routes.rb文件更改为:

MyEngine::Engine.routes.draw do
  #get "things/index"
  match "things/index" => "things#index"

end

...然后点击http://locahost:3005/my_engine/things/index,我看到了正确的Things#index视图。

我注意到,当我使用HttpHelpers#get引擎config/routes.rb文件中的方法并rake routestest/dummy目录运行时,我看到:

$ rake routes
my_engine  /my_engine MyEngine::Engine

Routes for MyEngine::Engine:
things_index GET /things/index(.:format) things#index

但是,如果我更改引擎的config/routes.rb文件以使用 URL 匹配器方法,我会看到:

$ rake routes
my_engine  /my_engine MyEngine::Engine

Routes for MyEngine::Engine:
things_index  /things/index(.:format) my_engine/things#index

请注意,当使用 URL 匹配器时,控制器和操作在引擎下正确命名。而在使用 时HttpHelpers#get,控制器和操作似乎是非命名空间的。

所以,我的问题是:我在这里做错了吗?或者,这是一个错误?

注意:我搜索了 rails 问题,没有看到任何与此直接相关的内容。虽然我确实看到了其他几个引擎和路由问题。

4

0 回答 0