Rails Tutorialで学べることメモ-第11章-
Rails Tutorial を改めてしっかりやり直してのメモ第 11 章編
https://railstutorial.jp/chapters/account_activation?version=7.0
便利なコマンド・メソッド
assert_match
文字列を正規表現でテストできる。
assert_match 'baz', 'foobar' # false
assert_match /\w+/, 'foobar' # true
CGI.escape(arg)
@
を%40
にするようなエスケープ処理を行う。
super
super
を呼び出したメソッドと同名の規定クラスメソッドを実行するための記述。
update_columns
update_attribute
はupdate_attribute(:name, "sake")
のように特定の属性をコールバックなしに更新する際に利用した。
update_columns
は同じくコールバックなしの更新で、複数属性を更新できる。引数には属性と値のハッシュを取る。
知識
メソッド参照
before_create
のようなコールバックメソッドにブロックの無名関数ではなく、メソッド名を渡す書き方。
before_create :create_activation_digest
クエリパラメータ
URL の末尾に疑問符?
をつけて、その後にキーと値のペアを記述する方法。複数記述する場合は&
で繋ぐ。
example.com/users/1/edit?token=xxxxxxxxx&email=sample%40example.com
メタプログラミング
プログラムでプログラムを作成するような機能、コト。
Ruby のメタプログラミング機能は非常に強力で、Rails の黒魔術の多くはこれを活用して生み出されているらしい。
send
メソッドはオブジェクトに呼び出したいメソッドを「メッセージする」ことで、その結果を受け取るようなメソッドである。
例えば
foo = "sample text"
foo.length
foo.send(:length)
foo.send("length")
これらは全て同じ結果を返す。これを使えば、動的にメソッド呼び出しが可能になる。
&&
とand
両者の動作は「ほぼ」等価。
&&
演算子の方がand
よりも優先順位が高い。
Mailgun
メール配信を行うことができるクラウドサービス。
無料でクレジットカードなどの登録なしに始めることができ、本番環境でのメール送信テストができる。
Mailgun の gem を使って API キーとドメイン情報を設定することで、いい感じにラップされた Mailer クライアントとしてコードを書く方法もありそうだったが、チュートリアル内では単純に SMTP サーバーとして指定するような設定をしている。
まとめ
アカウント登録時のメールによる有効化を題材に、これまで扱ったトークンの扱いの復習になるような内容やメールの扱いをメインで学ぶ章だった。
クエリパラメータや文字列のエスケープ処理は無知で挑めば必ずハマる沼なので、ここでサラッと取り上げられているのはすごくいい。
また、Ruby の特徴の一つであるメタプログラミングにも触れられている。個人的にはこれって使っちゃっていいのかな...?と感じる機能の一つだったので、ユースケース例にここで触れられるのは助かるなぁと感じた。