8

Rails 4 にアップグレードしたところ、ルーティングで予期しない動作が発生しました。

EmailPreviewController という名前のコントローラーがあります。このためのルーティングは次のとおりです。

get "/emailpreview", controller: 'EmailPreview', action: :index

ただし、Rails 4 にアップグレードした後、環境が読み込まれると、次のエラーがスローされます。

'EmailPreview' is not a supported controller name. This can lead to potential routing problems. See http://guides.rubyonrails.org/routing.html#specifying-a-controller-to-use

提案されているページを見てきましたが、キャメルケース名のコントローラーを使用することが間違っているという兆候はありません。

コントローラーを小文字に変更しても問題はありません。

# this works fine
get "/emailpreview", controller: 'emailpreview', action: :index

これは予想される動作ですか?現在、キャメルケースのコントローラー名を使用することはできませんか、それとも何か他のことが起こっていますか?

4

1 に答える 1

14

これに対する答えは、やや直感に反するものでした。設計どおりだと思いますが、期待したものではありません。

Rails 3 では、オブジェクトの名前を使用してコントローラーを指定できました。

Rails 3 では、コントローラー オブジェクトの名前を渡すことができ、Rails はその方法を見つけます。

get "emailpreview", controller: 'EmailPreview', action: :index

EmailPreviewController内に含まれるへの道を見つけるでしょうemail_preview.rb

ただし、Rails 4 では、コントローラー名をスネーク ケースで渡す必要があります。

Rails 4 では、コントローラー オブジェクトの名前をスネーク ケースで渡す必要があるようです。

get "emailpreview", controller: 'email_preview', action: :index

これは、EmailPreviewController内に含まれる に進みますemail_preview.rb

http://guides.rubyonrails.org/routing.html#controller-namespaces-and-routingも参照してください(ただし、この特定のインスタンスではあまり説明しません)。

于 2013-10-27T15:01:40.227 に答える