#respond_toメソッドとは?
URLにアクセスする際に、リクエストされるフォーマット(HTMLやJSONなど)ごとに、処理を分けることができるメソッドです。
リクエストのフォーマットは、URLの最後に拡張子(htmlやjsonやjs等)をつけることで、指定することが出来るものです。
普段、インターネットを利用する時に、わざわざ拡張子まで意識して利用している人は少ないと思いますが、特にフォーマットの指定がなかった場合は、デフォルトのHTML形式で送信されます。
近年に入り、Web APIでJSON形式のデータを扱うことも増えたので、このメソッドを目にする機会も多くなりました。
つまり、通常はHTML形式で結果を取得できているのですが、明示的に他のフォーマットを指定された場合に備えて、このrespond_toメソッド
を使用しましょう、ということです。
#使い方
まずは基本構文から確認しましょう。
respond_to do |format|
format.形式 {行いたい処理}
end
↑のように記述します。
#具体的な使用例
class BooksController < ApplicationController
def index
@books = Book.all
respond_to do |format|
format.html {redirect_to root_path}
format.json {render json: @books}
format.js {render 'shared/index.js.erb'}
end
end
end
また、format.html
に処理の指定を記載しない場合もあります。
class BooksController < ApplicationController
def index
@books = Book.all
respond_to do |format|
format.html #何も書かないパターン
format.json {render json: @books}
format.js {render 'shared/index.js.erb'}
end
end
end
このように、format.html
に具体的な指定を書かない場合は、デフォルトのテンプレートが指定されたフォーマットで表示されます。
#format.anyとは?
通常は、上記のような記述をするパターンがほとんどです。
まれに、それ以外のフォーマットを指定されるパターンもあり、
format_any
を使用することもあります。
#おわりに
メソッドの意味自体は、比較的簡単だと思うのですが、使いどころが難しいですね。
アプリを開発するときは、あらゆる可能性を考え抜いた上で、ユーザーに快適に使ってもらえるように、試行錯誤しないといけないということでしょうか。