rails tutorial 第6章


はじめに

独学でrails tutorialを進めていく過程を投稿していきます。

進めていく上でわからなかった単語、詰まったエラーなどに触れています。

個人の学習のアウトプットなので間違いなどあればご指摘ください。

初めての投稿なので読みにくいところも多々あるかと思いますがご容赦ください。

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

6.2.2 存在性を検証する

存在性の検証は:presenceで行うようです。
tutorialではよく省略されたコードが示されていますのでしっかり理解するまでは自分でフォローもしておこうかと思います。

validates :name, presence: true
#すべて括弧をつけると
validates(:name, {presence: true}) #第一引数には検証するカラム名を、第二引数には検証する内容

問題発生!!
リスト6.13のtestを実行すると

RuntimeError: RuntimeError: database is locked

と表示されエラーになってしまう。

解決のために試したこと

参考記事1
https://qiita.com/kambe0331/items/1eaf2383b39c721e7283
こちらの記事を参考にし、dbファイル下のtest.sqlite3というファイルの名前を一旦変更し再度元の名前に戻しました。

結果
上手くいかず、、、

次に

参考記事2
https://stackoverflow.com/questions/7154664/ruby-sqlite3busyexception-database-is-locked/62730905#62730905
こちらの記事を参考にし、DB Browser for SQlite、サーバー、プロンプトなどを一度全て終了して、改めて起動。

結果
テストをクリア出来ました。

余談
一時的にテストをクリアできましたが、どうやら根本的には解決出来ていなかったようで、こちらのエラーこれからも頻発します。

エラーの解決方法は別の記事にまとめました。
https://qiita.com/shun_study_p/items/fbb4cb2d4c392063c9a9

6.2.3 長さを検証する

長さの検証は:lengthで行うようです。

validates :name,  presence: true, length: { maximum: 50 }
#わかりやすく括弧をつけると
validates(:name,  {presence: true, length: { maximum: 50 }})

先程と同様、慣れるまでは括弧を自分でフォローしておきます。

6.2.5 一意性を検証する

一意性の検証は:uniquenessで行うようです。
:case_sensitiveというオプションを使うことで、大文字小文字を区別するか指定が出来るようです。

case_sensitive: false

とすることで:uniquenessの値が一意かどうかの検証で大文字と小文字を区別しないというオプションを追加しています。


問題発生!!
最後にrails testを実行したところ

Migrations are pending. To resolve this issue, run:
      bin/rails db:migrate RAILS_ENV=test

とのエラーが発生しました。
素直に表示されたコマンド実行するとmigrateできないとのエラーが、、、

解決
以下の記事を参考にし
http://kzlog.picoaccel.com/post-995/

rails db:rollback RAILS_ENV=test
rails db:migrate RAILS_ENV=test

上記のコマンドを実行すると正常に動作しました。

終わりに

今回は少しエラーに躓きました。
しかし、6章の内容はしっかり理解が出来ました。