初心者開発メモ!

プログラミングやる上で手こずりやすいところを解説しているブログです

railsのapplication_controllerについて

railsを使う時に普段使っているapplication_controller.rbについて詳しく調べてみました。

application_controller.rbの詳細

application_controller.rbとは

f:id:ryouzis:20150820185854p:plain

これは何も手を加えていないapplication_controller.rbです。
1行目を見てみましょう。
class ApplicationController < ActionController::Base
と記述してあります。
この記述によりapplication_controller.rbはActionController::Baseを継承しています。 ActionController::Baseとはrailsの様々なメソッドが使えるものです。
詳しくは下記のサイトを参照してください。
Action Controller の概要 | Rails ガイド

また、applicatio_controller.rbはすべてのコントローラで共通しているコントローラです。
f:id:ryouzis:20150820182737p:plain
これはtop_controller.rbをデフォルトで作ったものです。 1行目を見てください。
class TopController < ApplicationController
と記述してあります。
これによってtop_controller.rbがapplication_controller.rbを継承するということです。
これらがすべてのコントローラで記述されるのでapplication_controllerはすべてのコントローラに継承されています。
これによってapplication_controller.rbで記述されている処理やapplication_controller.rbが継承しているActionController::Baseの便利なメソッドをすべてのコントローラで使用できることです。

protect_from_forgery with:exceptionについて

protect_from_forgery with: :exception
はapplication_controllerにデフォルトで記述されています。
これはCSRFという攻撃の対策してくれています。
CSRFとはクロスサイトリクエストフォージェリの略で、
Webサイトにスクリプトや自動転送などを仕込むことによって、閲覧者を意図的に別のWebサイト上で何らかの操作などを行わせる攻撃だそうです。
そういった攻撃を行わせないためにこの記述をしているようです。