Railsでリソースをルーティングするとき、オプションのフォーマット属性が自動的に生成されたルートに追加されます。これは、問題のリソースをXML、HTMLなどのいずれかで要求できるようにするためです。実際に許可されているフォーマットは通常コントローラでrespond_to
を使用して記述します。Railsルートファイルのリソースフォーマットを制限する方法
多くの場合、HTMLをサポートしたいだけで、すべてのコントローラー内のすべてのアクションにrespond_to :html
を書き込むオーバーヘッドのように感じます。そのため、routes.rbファイルにルートを作成するときに、許可されたコンテンツタイプに制限する方法がある場合は涼しいでしょう。
map.resources :users, :formats => :html
map.resources :users, :formats => [:html, :xml]
map.resources :users, :formats => {:index => :html, :show => [:html, :xml]}
これをネイティブプラグインまたはプラグイン経由で実現する方法はありますか?
P.S.これを回避する通常の方法は、問題を無視して、アクションにrespond_to
を使用しないことです。しかし、これは実際に許可されたコンテンツタイプを制限しません。代わりに、可能なコンテンツタイプごとにviewsディレクトリ内にテンプレートが存在することが予想されます。要求されたときに存在しない場合、システムはHTTP 500エラーをスローします。
いいえ、500エラーは何かがサーバー上に間違っていた意味。コンテンツタイプがサポートされていない場合、サーバーエラーではありません。クライアントエラーです(クライアントは要求してはなりません)。 406が正しい応答コードになります。 「HTTP応答コード」を参照してください。http://www.sitepoint.com/blogs/2008/02/04/restful-rails-part-i/ –
最後に.xmlまたは.htmlというタグを付ける場合は、 URLとその形式がサポートされていない場合、404が見つかりません。コンテンツタイプごとにURLを作成することでconnegの使用を無視しても構いませんが、acceptヘッダーに有効なコンテンツタイプがない場合はrepsonseコードを盗みます。 –
Railsが実際にどのように機能するのかは分かりますが、ポイントがあるかもしれません。しかしそれにもかかわらず、これは私の質問のポイントではありません。私はまだ中央の場所(好ましくはルートファイル)にこれを指定したいと思っています - それでは、404または406がエラーで返されるかどうかにかかわらず、 –