見出し画像

初心者がRailsのコードリーディングに挑戦 #9


以前見たこちらの記事を参考に、Railsのコードリーディングに挑戦してみたいと思います。

◇ 前回までの記事一覧


コードを読む

の続きから!

前回は上記の画像の赤線部(defaults = attributes.extract_options!.dup)について詳しく見ていきました。
前回あれだけ書いたことが、このたった1行に凝縮されていると思うと恐ろしいですね。

次はその1行下の、validations = defaults.slice!(*_validates_default_keys)を見ていくようです。defaultsはさっきの変数ですね。

sliceというのは “配列や文字列から指定した要素を取り出すことができるメソッド” とのこと。
そして!が付いてslice!になることで、 “配列や文字列から指定した要素を切り取ることができるメソッド”になるようです。

slice!

例えば以下のようなイメージのよう。

array = [0, 1, 2, 3, 4, 5]
num = array.slice!(1)
として、

puts num 
=>1

puts array 
=>0, 2, 3, 4, 5


次は(*_validates_default_keys)について。
コンソール画面でnextと入力すると、左端の矢印をひとつ下げる事ができます。

さらにstepと入力すると、_validates_default_keysというメソッドが定義されている場所を見る事が出来ます。

メソッドの中に書いてある:if, :unless,〜などはバリデーションのオプションのようです。

バリデーションのオプション

なのでvalidationsはdefaultsから該当するバリデーションのオプションを切り出したものということですね。
そして、defaultsはslice!によって切り取られたオプション以外のバリデーションということですね!
(ここ違いました。詳しくは下に。)

試してみます。
確認用のRailsプロジェクトに追記したバリデーションは今はこんな感じです。

特にオプションは付いていないので、コンソールで表示してもらうとこんな感じ。
※108行目の処理が終わった後でないと正しく表示されなかったです。110行目までnextで進めてから以下を入力しました。

むーん。さっき言ってた事の逆になってますね。
なんでだろう。
_validates_default_keysに*が付いている事が関係している?
色々調べていたらそれっぽい記事を見つけました ↓ 

slice!(*_validates_default_keys)

Railsソースコードのこの部分の事が書いてありました!

ここでslice!(*keys)というメソッドを定義してあるんですね。
コメントアウトの部分が使い方の説明みたいです。

hash = { a: 1, b: 2, c: 3, d: 4 }
hash.slice!(:a, :b)  => {:c=>3, :d=>4}
hash  => {:a=>1, :b=>2}

hash.slice!(:a, :b)の結果は、aとbが無くなったcとdだけになっていますね。

これなら納得です!
validationsはdefaultsから該当するオプションを消したもの。
defaultsはslice!によって切り取られたオプションですね。

よしよし。
ではオプションをつけてみます。

unless: “name.nil?”を追記しました。

これでvalidationsとdefaultsがどうなったか見てみます。

なぜか入力したdefaultsが消えてしまったので分かりづらいですが、白線より下がdefaultsの結果です。

validationsは:unlessオプション以外の部分(:length=>{:maximum=>30})になっていて、defaultsは:unlessオプションになっていますね。


ふう。難しかった(-.-;)
こうやって1行ずつ解読していくのが “ソースコードを読む” という事なんですね。
どこまでやるかが悩みものです。
とりあえず次回残り2行をやって、その後は一旦SQLiteの勉強に移ろうかなと思っています。
やる気維持のため!

がんばります!

いいなと思ったら応援しよう!

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy