Closed kyoshida-aim closed 5 years ago
現時点ではアプリケーション上でタスクを登録しようとするとエラーが発生する(ユーザーを取得する方法がないため) ログイン機能実装時に退避したテストを流れるように再度調整します
現時点ではアプリケーション上でタスクを登録しようとするとエラーが発生する(ユーザーを取得する方法がないため) ログイン機能実装時に退避したテストを流れるように再度調整します
ブラウザ上からタスクを登録する部分は退避する、で良いと思いますが、 それ以外で、factoryでtaskを作っている部分はfactoryでuser_id埋まるようにしてあれば、テスト動いたりしないですか?
データベースを新規作成する場合にはmigrationは問題なく動作するのですが、すでにタスクが存在している状態でuser_id
を追加するマイグレーションを実行しようとしてもエラーが発生するようです。
migrationファイルの中で既存のタスクにユーザーを紐づけるようにします
あれ。。エラーになるのかー。。 どういうエラがーでてるんですか?
NP0326-kyoshida:RailsTraining kyoshida$ bin/rails db:migrate
== 20190710091902 AddUseridToTask: migrating ==================================
-- add_reference(:tasks, :user, {:null=>false, :index=>true})
rails aborted!
StandardError: An error has occurred, this and all later migrations canceled:
PG::NotNullViolation: ERROR: column "user_id" contains null values
: ALTER TABLE "tasks" ADD "user_id" bigint NOT NULL
/Users/kyoshida/Desktop/training/RailsTraining/db/migrate/20190710091902_add_userid_to_task.rb:3:in `change'
/Users/kyoshida/Desktop/training/RailsTraining/bin/rails:9:in `<top (required)>'
/Users/kyoshida/Desktop/training/RailsTraining/bin/spring:15:in `<top (required)>'
bin/rails:3:in `load'
bin/rails:3:in `<main>'
Caused by:
ActiveRecord::NotNullViolation: PG::NotNullViolation: ERROR: column "user_id" contains null values
: ALTER TABLE "tasks" ADD "user_id" bigint NOT NULL
/Users/kyoshida/Desktop/training/RailsTraining/db/migrate/20190710091902_add_userid_to_task.rb:3:in `change'
/Users/kyoshida/Desktop/training/RailsTraining/bin/rails:9:in `<top (required)>'
/Users/kyoshida/Desktop/training/RailsTraining/bin/spring:15:in `<top (required)>'
bin/rails:3:in `load'
bin/rails:3:in `<main>'
Caused by:
PG::NotNullViolation: ERROR: column "user_id" contains null values
/Users/kyoshida/Desktop/training/RailsTraining/db/migrate/20190710091902_add_userid_to_task.rb:3:in `change'
/Users/kyoshida/Desktop/training/RailsTraining/bin/rails:9:in `<top (required)>'
/Users/kyoshida/Desktop/training/RailsTraining/bin/spring:15:in `<top (required)>'
bin/rails:3:in `load'
bin/rails:3:in `<main>'
Tasks: TOP => db:migrate
(See full trace by running task with --trace)
Null制約を消すとmigration実行できるので、既存のタスクがNull制約に引っかかるようなmigrationは弾かれるようです。 default値が設定されていないから、というのもあるかも
なるほどー
https://github.com/kyoshida-aim/RailsTraining/pull/30/commits/cebabf2c38a87ff578c3326f90f05810292b09ba このコミットは、あとでrebaseするぞって自分へのメッセージのコミットでは・・・?
cebabf2 このコミットは、あとでrebaseするぞって自分へのメッセージのコミットでは・・・?
[05dc64e]こっちのコミットをgithubにpushした後に修正したくなったのでrebaseのタグをつけてマージ前にrebaseしようと思ってました。 修正してpushし直します。
コミット整理してpush-fし直したらマージします。 最終的なコード自体には変化はありません。
概要
理由
確認方法
ユーザーの追加
パスワードのあれこれ
すでに作成したタスクをユーザーに紐付ける
やっていないこと
パスワードのバリデーション(n文字以上)はログイン機能を実装する際に設定します
相談事項
User
モデルのテストは特にする必要性を感じず無効化しても問題ないと思っています。