1

私の環境:

  • レール 3.2.8
  • ルビー 1.9.3p194
  • フェドラ 16 x86_64

この問題は、Rails Engine に固有のようです。

Rails Engine の routes ファイルで を使用するHttpHelpersと、ブラウザ経由でルートにアクセスすると「uninitialized constant Controller」が表示されるようです。しかし、エンジンのルート ファイルで 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

それで、エンジンからThings#indexhttp://locahost:3005/my_engine/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 routesから実行すると、次のように表示されることに気付きました。test/dummy

$ rake routes
my_engine  /my_engine MyEngine::Engine

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

しかし、config/routes.rbURL マッチャー メソッドを使用するようにエンジンのファイルを変更すると、次のように表示されます。

$ 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