パーフェクトRails輪読会 ver6

2021年9月2日 パーフェクト Ruby on Rails

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

フック

コントローラーのアクションの前後に処理を差し込むことができる(コールバックと似ている) onlyexpectを付けることで特定のアクションに対して実行できる。 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
Railsenumを定義している時、自動でscopeが定義される
https://kossy-web-engineer.hatenablog.com/entry/2020/05/31/113615
RailsEnumってどんな子?使えるの?
https://qiita.com/ozackiee/items/17b91e26fad58e147f2e