2014-11-19 17:17:21 +0900
Rails 4.0でrespond_to利用時にUnknownFormatが発生しないようにする方法。
コントローラーのアクションが以下のようなコードになっている場合、
class UsersController < ApplicationController
def show
@user = User.find(params[:id])
respond_to do |format|
format.html
format.xml { render xml: @user }
format.json { render json: @user }
end
end
end
/users/1.text
のようなパスにリクエストがあるとActionController::UnknownFormat
が発生する。
通常はその挙動のままで構わないと思うが、要件によっては「不明なフォーマットが指定された場合はすべてtext/htmlを返したい」ということもありうる。そのような場合は、format
のany
メソッドを使うことでデフォルトの挙動を指定することができる。
class UsersController < ApplicationController
def show
@user = User.find(params[:id])
respond_to do |format|
format.any
format.xml { render xml: @user }
format.json { render json: @user }
end
end
end
any
メソッドは、any(:xml, :json)
のように受け入れるフォーマットを引数で指定することもできる。
format.any(:xml, :json) { render request.format.to_sym => @user }
また、any
メソッドにはall
というエイリアスも設定されているので、format.all
という指定でもよい。
参考: