環境
- レール 3.2.6
- ルビー 1.9.3p194
私が見つけたもの
class ThemesController < ApplicationController
def show
end
end
/views/themes/show.html.erb
この設定では、URL 拡張子に関係なく、常にページがレンダリングされます。例えば:
http://localhost/themes/1.json
http://localhost/themes/1.xxx
http://localhost/themes/1.custom_ext
...
出会い
render :json=>@theme
拡張子が の場合に実行し、それ以外の場合はページjson
をレンダリングしたいshow.html.erb
ので、コードを変更しました。
respond_to do |format|
format.json { render :json => @theme}
format.any {render}
end
render :json=>@theme
URL 拡張子が の場合 に正しく実行され、、 など.json
でレンダリングshow.html.erb
されます。.xml
.html
ただし、、406 Not Acceptable
、に入りましたが、サポートされている MIME タイプしか許可されていないことが原因であることがわかりました。.xxx
.ooo
.custom_ext
一時的な解決策
class ThemesController < ApplicationController
def show
if params[:format].present? && params[:format] == "json"
render :json => @theme
end
end
end
.xml
、.json
、などの 2 つ以上の形式を提供する場合は、正常に動作します.yaml
。
class ThemesController < ApplicationController
def show
case params[:format]
when "json" then render :json => @theme
when "xml" then render :xml => @theme
...
else render
end
end
end
respond_to
それはきれいに見え、スタイルより悪くはありません:D
質問
- 別のより良い解決策があるかどうか疑問に思っていますか?
case
ステートメントができることはすべてrespond_to
できるが、できない場合respond_to
、なぜ使用する必要があるのrespond_to
ですか?