【パーフェクト Ruby on Rails】を読む - その7
2-2-4
コールバックによる制御
必ず行いたい前処理や後処理を書けます。
before_○○○○○
ahter_○○○○○
around_○○○○○
←あんまり使わないかも
ログを残したい場合に条件を自分で設定し作成できます。
ログレベル
ログレベル | 名称 | 内容 |
---|---|---|
0 | debug | デバッグ情報など |
1 | info | 一般的な情報 |
2 | warn | 警告 |
3 | error | 制御可能なエラー |
4 | fatal | プログラムをクラッシュさせるような制御不可能なエラー |
5 | unknown | 常に記録されるべき不明なエラー |
logger(Rails.logger).leverで設定変更が可能。これは場所を問わない。これを書けば、ログが吐き出される。Railsの記載は省略でき、loggerからで良いです。
2-2-5
enum
数値のカラムに対して別名を与えます。なのでカラムを追加する必要があります。(もしくはmodelかmigrationファイルを作成する)
# db/migration内 add_column :hoge, :category, :integer, null: false, default: 0
# model内 enum category: { bug: 0, request: 1, others: 2 }
enumはモデルに対して定義する必要があります。
enumのメソッドでwhere.notはnotを記載する事で取得する事ができます。
# enumの書き方 Article.not_draft # これが取得できます。 Article.where.not(status: draft)
2-3-2
フック
コントローラーのアクションの前後に処理を差し込むことができる(コールバックと似ている)
only
やexpect
を付けることで特定のアクションに対して実行できる。
berore_action :hogehoge, only: [:show, :update]
フック一覧 | 処理が実行されるタイミング |
---|---|
before_action | Actionの実行前 |
after_action | Actionの実行後(正常にActionが実行された場合のみ呼び出される) |
around_action | Actionの前後 |
フックのスキップ
例えば、ログインが必要なアプリの時にApplicationControllerに操作を制御するフックを記載した場合、継承先のcontrollerに、skipのクラスメソッドを使用する必要があります。 そうしないと、いつまでもログインができないので注意が必要です。
CSRF適用を無効にしたい時の記述
特定のアクションのみセキュリティトークンの検証を行わないようにするには、下記のように記述します。
protect_from_forgery except: :update
複数のアクションで用いたい場合は配列で記述します。 ですが、基本的によほどのことがない限りセキュリティに穴をあけることになるので無闇に記述するのは辞めましょう。
ひとこと
around_action
なんて知らなかった。
参考
意外と知らないかもしれないRuby, Railsのメソッドとか
https://qiita.com/hc0208/items/45cce0f3f3c843c03c01#increment-decrement
Railsでenumを定義している時、自動でscopeが定義される
https://kossy-web-engineer.hatenablog.com/entry/2020/05/31/113615
【Rails】Enumってどんな子?使えるの?
https://qiita.com/ozackiee/items/17b91e26fad58e147f2e