Rails Tutorialやってみた! 09 (第6章-1)

公開日:2019-03-13
最終更新:2019-03-15

100DaysOfCode 10/100

https://github.com/ta-mmc/sample_app

第6章 ユーザーのモデルを作成する

6章~12章はログイン、認証システムの開発のようです。いよいよ本番ですね!

Active Record

  • データベースとやり取りするRailsのメソッド

  • RailsのActive RecordやMigration機能によってデータベース操作をRubyで行えるため、
    (現段階では)SQLをあまり意識しなくてもよい

モデルの作成

rails generate model User name:string email:string
  • これでname(string型)とemail(string型)の属性を持ったUserモデルが作成される

  • コントローラーは複数形、モデルは単数形

マイグレーションファイル

  • データベースに与える変更を定義したファイル changeメソッドが記述されている

  • データベースには、さきほど設定したカラム以外に
    created_atupdated_atというタイムスタンプを保存するカラムが自動的に追加される

  • rails db:migrateで実際にマイグレーションを適用する(データベースに反映する)

モデルのコード

class User < ApplicationRecord  
end
  • User.newはオブジェクトを作成するだけで、データベースへの保存はsaveで行う

  • セーブするとidcreated_atupdated_atカラムに値が追加される

  • newsaveを同時に行うcreateというメソッドもある

  • その逆、destroyもある

ユーザーオブジェクトの検索

  • User.findUser.find_byで検索ができる

  • 完全一致で検索する

ダックタイピング

「もしアヒルのような容姿で、アヒルのように鳴くのであれば、それはもうアヒルだろう」

User.all で作成される配列は正確にはUser::ActiveRecord_Relation クラスだが、
これは配列のようなもので、 Array クラスと同じ感覚で使える

ユーザーオブジェクトの更新

代入する方法

  • 保存にはsaveが必要
user.email = "[email protected]"  
user.save

update_attributeを使う方法

user.update_attribute(name: "Taro Yamada", email: "[email protected]")

ユーザーの検証

ユーザーを登録する上で、例えば名前が空欄といった不適切なデータを弾く仕組みが必要です。

  • 存在性
  • 長さ
  • フォーマット
  • 一意性

これらをまとめて、データの有効性を検証(validation)していきます。

valid?

  • user.valid?で、あらかじめ作成したバリデーションから有効性を検証

(テスト)assert_not

  • assertと逆

  • assert_not fooでは、fooが真のときにfalseを返す

  test "name should be present" do  
    @user.name = "     "  
    assert_not @user.valid?  
  end

少し紛らわしいですが、この場合は
@user.name が空白のとき、 @user.valid?falseであればpass」というテストとなります。

このテストをpassできるということは、有効性の検証がうまく機能しているということになります。

varidates

  • 2章でも登場した、検証を行うメソッド
validates :name, presence: true

これをUserクラスに記述した状態でvalid?を実行すれば、
:name空でないことを検証してくれます。

validatesを複数書いた場合は、全ての検証に成功しないとvalid?でtrueを返してくれません。

しかもfalseを返したときはエラーメッセージを生成してくれるので、
.errors.full_messagesで確認すればどの検証で引っかかったかがわかります。便利。

終わりに

盛りだくさんの内容ですが、ユーザー登録機能は普段から馴染みのあるものなのでとても楽しいです。

2章のときも思いましたがvalidatesが強力ですね。

次回は6章(6.2.3~)を終わらせます。
余裕があれば7章にも入りたいです。

記事が少しでもいいなと思ったらクラップを送ってみよう!
18
+1
@tammcの技術ブログ

よく一緒に読まれている記事

0件のコメント

ブログ開設 or ログイン してコメントを送ってみよう
目次をみる

技術ブログをはじめよう

Qrunch(クランチ)は、ITエンジニアリングに携わる全ての人のための技術ブログプラットフォームです。

技術ブログを開設する

Qrunchでアウトプットをはじめよう

Qrunch(クランチ)は、ITエンジニアリングに携わる全ての人のための技術ブログプラットフォームです。

Markdownで書ける

ログ機能でアウトプットを加速

デザインのカスタマイズが可能

技術ブログ開設

ここから先はアカウント(ブログ)開設が必要です

英数字4文字以上
.qrunch.io
英数字6文字以上
ログインする