5
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

[Rails]respond_toについて勉強してみた!![初心者]

Posted at

#respond_toメソッドとは?
URLにアクセスする際に、リクエストされるフォーマット(HTMLやJSONなど)ごとに、処理を分けることができるメソッドです。
リクエストのフォーマットは、URLの最後に拡張子(htmlやjsonやjs等)をつけることで、指定することが出来るものです。

普段、インターネットを利用する時に、わざわざ拡張子まで意識して利用している人は少ないと思いますが、特にフォーマットの指定がなかった場合は、デフォルトのHTML形式で送信されます。

近年に入り、Web APIでJSON形式のデータを扱うことも増えたので、このメソッドを目にする機会も多くなりました。

つまり、通常はHTML形式で結果を取得できているのですが、明示的に他のフォーマットを指定された場合に備えて、このrespond_toメソッドを使用しましょう、ということです。

#使い方
まずは基本構文から確認しましょう。

respond_to do |format|
  format.形式 {行いたい処理}
end

↑のように記述します。

#具体的な使用例

books_controller.rb
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に処理の指定を記載しない場合もあります。

books_controller.rb
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
を使用することもあります。

#おわりに
メソッドの意味自体は、比較的簡単だと思うのですが、使いどころが難しいですね。
アプリを開発するときは、あらゆる可能性を考え抜いた上で、ユーザーに快適に使ってもらえるように、試行錯誤しないといけないということでしょうか。

5
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?