💎
Railsチュートリアル〜14(8/26+27の積み上げ)
作成日:
2021/08/27
0
6章続き(すでに3日目)
6.1.2 modelファイル
- Rails console して変数にUserクラスのオブジェクトを代入してsuperclassで確認
6.1.3 ユーザーオブジェクトを作成する
- Rails consoleのサンドボックスモードってなんだ?
User.newを引数なしで呼んだ場合は、すべての属性がnilのオブジェクトを返します。
- そうなんだ…そりゃそうか
- UserクラスそのものにValid(有効性)メソッドがあるってよ!
データベースにUserオブジェクトを保存するためには、userオブジェクトからsaveメソッドを呼び出す必要があります。
- New しただけではあくまでもオブジェクトをふわっと作っただけ
- ふわってのをちゃんとDBに反映するならsaveしろってこと
- Saveするとその時内部で実行されたSQL文が表示される
- Nilだったカラムのほとんどが埋められた
- ちなみにUserのオブジェクトに何も入れなくてもsaveできる。この場合 マジックカラムのみ代入されてそれ以外のカラムはnilになることに注意
- User.createってのがあってnewと似たような動きをするけどnew とは違って生成だけでなく保存もされる、らしい
- destroyを使ってもコンソールで呼び出したら表示される…メモリにある?
6.1.4 ユーザーオブジェクトを検索する
一般的なfindメソッド以外に、Active Recordには特定の属性でユーザーを検索する方法もあります。
- Progateで散々使ったやつか…
- Use.all はDB上の全てのレコードが返されるってのはわかるんだけど限界値ってどれくらいなんだろう?何万件?何十万件?
- find_byとfind_by_nameは引数の渡し方が若干違う
- ダックタイピングって考え方があるよ
8/26はここまで
6.1.5 ユーザーオブジェクトを更新する
- 6.1.3からrails console のサンドボックスで操作してるので可能な限り一気にやった方が良さそう。というか絶対イイ。今すでに5度目のsandboxでのオブジェクト作り直し中…(Cloud9環境によるところも大きいかも…)
updateメソッドは属性のハッシュを受け取り、成功時には更新と保存を続けて同時に行います
- 今までは更新と保存別々だったからね…
6.2 ユーザーを検証する
- バリデーションの話
存在性、長さ、フォーマット、一意性、確認 を追加
6.2.1 有効性を検証する
まず失敗するテストを書き、次にテストを成功させるように実装すると、期待した通りに動いている自信を持てるようになります。
- 最初に間違えといて後で正解を書く、と_φ(。_。*)
- TDD=Test Driven Development=テスト駆動開発
6.2.2 存在性を検証する
- rails consoleを起動する前にvalidateを作って上書きしとく
6.2.3 長さを検証する
- test/modelのuser_test.rb内にテスト用のメソッドをぞくぞく追加
- なんだか知らないけど途中からrails consoleの挙動がおかしくなった
- …rails test は rails console を抜けてからでないと実行できず、validの有効性を確認するにはrails consoleに入ってからでないと検証できないというジレンマ(=メンドい…)
6.2.4 フォーマットを検証する
メールアドレスのバリデーションは扱いが難しく、エラーが発生しやすい部分なので、有効なメールアドレスと無効なメールアドレスをいくつか用意して、バリデーション内のエラーを検知していきます。
- メールアドレスは瑣末な部分を検証しないといけないから細かい…
メールアドレスのフォーマットを検証するためには、次のようにformatというオプションを使います。
実践的でシンプルな正規表現を採用
- シンプルイズベスト!
- ? USER@foo.COM がRubularでMatchしないけどなんで?
6.2.5 一意性を検証する
- :uniquenessオプションを使う
既に存在するモデルに構造を追加するので、次のようにmigrationジェネレーターを使ってマイグレーションを直接作成する必要があります。
- インデックス必要だし重要だよね!
テストDB用のサンプルデータが含まれているfixtures内で一意性の制限が保たれていないため、テストは RED になります
- fixtures のコード消したら GREEN になった
- 大文字と小文字を区別したくないために
Active Recordのコールバック(callback)メソッドを利用
1節を終わらせるのにめちゃくちゃ時間かかる
長い道のり……
SJC-P1.4/心理学検定特1級所持 過去:専門学校で非常勤講師(複数) 現:フリーター/2児の子持ち/家庭教師バイト中 Doing:#HTML #CSS #JavaScript #Ruby #Rails #心理学@放送大学(心理と教育コース)
Webアプリを開発したくて日々勉強中