4.2 レスポンス

フォーマットを設定する

コントローラで出力するフォーマットを決めるにはrespond_toメソッドを使います。

class PostsController < ApplicationController
  def index
    @posts = Post.all
    respond_to do |format|
      format.html
      format.xml  { render xml: @posts }
      format.json { render json: @posts }
    end
  end
end

フォーマットとして指定できる形式は以下になります。

フォーマット
html HTML
xml XML
json JSON
rss RSS
atom ATOM
yaml YAML
text TEXT
js JavaScript
css CSS
cvs CVS
ics ICS

文字列を表示する

文字列を表示するにはrenderメソッドにplainというキーと描画したい文字列のハッシュを指定します。

class PostsController < ApplicationController
  def text
    render plain: 'このテキストは描画されます。'
  end
end

JSONを表示する

JSONを表示するにはrenderメソッドにjsonというキーと描画したいオブジェクトのハッシュを指定します。

class PostsController < ApplicationController
  def show
    @post = Post.find(1)
    render json: @post
  end
end

XMLを表示する

XMLを表示するにはrenderメソッドにxmlというキーと描画したいオブジェクトのハッシュを指定します。

class PostsController < ApplicationController
  def show
    @post = Post.find(1)
    render xml: @post
  end
end

ステータスコードを設定する

ステータスコードを指定するときはheadメソッドを使います。

class PostsController < ApplicationController
  def show
    @post = Post.find(1)
    unless @post
      head :not_found
    end
  end
end

100番台

番号 シンボル
100 :continue
101 :switching_protocols
102 :processing

200番台

番号 シンボル
200 :ok
201 :created
202 :accepted
203 :non_authoritative_information
204 :no_content
205 :reset_content
206 :partial_content
207 :multi_status
208 :already_reported
226 :im_used

300番台

番号 シンボル
300 :multiple_choices
301 :moved_permanently
302 :found
303 :see_other
304 :not_modified
305 :use_proxy
306 :reserved
307 :temporary_redirect
308 :permanent_redirect

400番台

番号 シンボル
400 :bad_request
401 :unauthorized
402 :payment_required
403 :forbidden
404 :not_found
405 :method_not_allowed
406 :not_acceptable
407 :proxy_authentication_required
408 :request_timeout
409 :conflict
410 :gone
411 :length_required
412 :precondition_failed
413 :request_entity_too_large
414 :request_uri_too_long
415 :unsupported_media_type
416 :requested_range_not_satisfiable
417 :expectation_failed
422 :unprocessable_entity
423 :locked
424 :failed_dependency
426 :upgrade_required
428 :precondition_required
429 :too_many_requests
431 :request_header_fields_too_large

500番台

番号 シンボル
500 :internal_server_error
501 :not_implemented
502 :bad_gateway
503 :service_unavailable
504 :gateway_timeout
505 :http_version_not_supported
506 :variant_also_negotiates
507 :insufficient_storage
508 :loop_detected
510 :not_extended
511 :network_authentication_required

使用するレイアウトを設定する

layoutメソッドを使うと使用するレイアウトを指定することができます。 指定しない場合はapp/views/layouts/application.html.erbがレイアウトとして利用されます。

class PostsController < ApplicationController

  layout 'admin' # adminという管理画面用のレイアウトを指定

  def show
    @post = Post.find(1)
  end
end

使用するテンプレートを設定する

デフォルトではrenderメソッドを省略するとアクションの名前のテンプレートが呼ばれます。 renderメソッドを利用することで使用したいテンプレートを変更することができます。

他のアクションのテンプレートを呼び出す

class PostsController < ApplicationController
  def create
    @post = Post.create
    render :show # showアクションのテンプレートを呼び出す
  end
end

パスを指定してテンプレートを呼び出す

class PostsController < ApplicationController
  def create
    @post = Post.create
    render 'admin/posts/show' # テンプレートのパスを指定
  end
end

フラッシュメッセージを表示する

フラッシュメッセージは簡易的なメッセージを表示することができる機能です。 リクエストごとにクリアされるflashというハッシュに格納したテキストを利用することができます。

格納時にキーを指定することができます。

メッセージの格納

flash[:notice] = '注意!'

格納したメッセージの削除

flash.discard(:notice)

ビューで表示する

<div class="alert">
  <%= flash[:notice] %>
</div>

ファイルをダウンロードできるようにする

ファイルをダウンロードさせるにはsend_fileメソッドを使います。

class PostsController < ApplicationController
  # ディスク上に生成・保存済みのファイルを送信する
  def download_report
    post = Post.find(params[:id])
    send_file(
      "#{Rails.root}/files/post/#{post.id}.pdf", # ファイルのパス
      filename: "#{post.title}.pdf",             # 出力するファイル名
      type: "application/pdf"                    # Content-Type
    )
  end
end

results matching ""

    No results matching ""