基本的に、2周目のときにブラッシュアップできたらなぁっておもっています。
開発環境
下記vagrantにて構築して利用しています。
$ cat /etc/system-release
CentOS release 6.10 (Final)
$ uname -a
Linux localhost.localdomain 2.6.32-754.3.5.el6.x86_64 #1 SMP Tue Aug 14 20:46:41 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
$ rails -v
Rails 5.1.6
$ ruby -v
ruby 2.3.1p112 (2016-04-26 revision 54768) [x86_64-linux]
6章スタート
@2018/10/30
6.1.4 ユーザーオブジェクトを検索する
~
6.2 ユーザーを検証する・・・nameのフォーマットとか、重複チェック等
~
model用のテストは、
test/models/配下にrails g したときに生成される。
テストについて -> https://railsguides.jp/testing.html
modelのテストを実行
$ rails test:models
~
6.2.1 有効性を検証する
setupはテストの最初に実行される。
まで対応。
6章はUserモデルの属性のnameやemailにバリデーションを複数設定することをやります。
・ valid?・・・・有効性チェック
・ 存在チェック
・ 長さチェック
・
また、それらをテスト駆動で開発するために、テストの書き方についてもここで実施しています。
@2018/10/31
この章はさらっと行きます。
6.2.2 存在性を検証する
presence ... 渡された属性が存在することを検証
assertは真が変えれば、true,偽であればfalseを返す
assert_notは真が変えれば、false,偽であればtrueを返す
Rubyでは、偽はnilかfalse、真はそれ以外
maximum: XXXで定義
6.2.3 長さを検証する
U.errors.messages[:name]とか
ここまで・
@2018/11/01
6.2.4 フォーマットを検証する
%wは文字列を配列にわけてくれます。
%w[foo bar baz] => ["foo", "bar", "baz"]
inspectとは????
railsのデバックのメソッドです。
いい感じに見やすくオブジェクトの情報を出力してくれるメソッドです。
たとえば、ハッシュや配列、クラスの属性等。
$ user = User.new(name: "michel", email: "abcdanbcd@example.com")
=> #<User id: nil, name: "michel", email: "abcdanbcd@example.com", created_at: nil, updated_at: nil>
$ user
=> #<User id: nil, name: "michel", email: "abcdanbcd@example.com", created_at: nil, updated_at: nil>
$ user.inspect
=> "#<User id: nil, name: \"michel\", email: \"abcdanbcd@example.com\", created_at: nil, updated_at: nil>"
irb(main):009:0>
これは全ての基礎となっているObjectクラスに実装されたメソッドです。
オブジェクト全てに使えるということです。
また、似ているメソッドに.to_s(to_String)がありますが、それよりもあとのバージョンのrubyに実装されました。
inspectメソッドはオブジェクトを人間が読める形にした文字列として返します。
@2018/11/02
・正規表現の話
下記サイトで対話的に正規表現をたしかめることができます。
http://www.rubular.com/
\ 正規表現
\←エスケープにも使われています。
@2018/11/03
6.2.5 一意性を検証する
Userのモデルの属性の、name,emailのうち、emailはユーザ名として利用するため
重複しないように一意になるようにバリデーションが必要です。
・userモデルのテストにまずテストをかく
・メールアドレスの大文字小文字関係ない問題
・・・upcaseとuniqueness: { case_sensitive: false }
・トラフィック増のときに一意性を保つために、DB側でインデックスにも一意性を持たす。
$ rails generate migration add_index_to_users_email
ファイルを生成する。
db/migrate/20181103042347_add_index_to_users_email.rb
indexを追加する処理を入れる
$ rails db:migrate
testがエラーになる。
fixtures(フィクスチャ)とは?・・・tset関連→DB関連
test/fixtures/テーブル名.yml
事前に用意したテストデータを読み込み、常にDBの内容を一定に保つための仕組みのことを、フィクスチャと呼ぶ
いったんまだ使わないので、あとにしましょう
メールアドレスに対するvalidationはいろいろ
・長さ、フォーマット(正規表現)、大文字小文字、重複問題
@2018/11/04
6.3 セキュアなパスワードを追加する
** マイグレーションついて **
このタイミングで、パスワード属性をUsersに持たせる必要が発生したが、classを編集したり、新たにクラスを作り直したりする必要はないし、DBにSQLでカラムを追加する必要が本来あるはずだ。
ただし、それを不要にしてくれるのがRailsのマイグレーションという機能だ。
rails g migration によりdb/migrate/XXXXXX.rbが生成され、追加した後続の定義が用意される。
そしてrails db:migrate をすることで、schema.rbに最新のDB構造が反映される。
一旦完了しました。