migrationファイルの修正
ロールバックして、何もない状態!db/schema.rb
をみると、まっさら👀
ということで、マイグレーションファイルを編集💨
まず、ユーザーがあって記事があるとという関係にしたい!
いまは、記事があってユーザーがある状態。
先にユーザーを作り、その後に記事があって、その記事の中にユーザーレファレンス
そうすることで、ユーザーidがないと絶対ここに保存できないよ!となる。
そのため、順番を入れ替える!
順番は、名前順になっている。
現在は、日付が古い順に並べられている。
そのためファイル名を変更!
前にやりたいファイルの名前を新しい数字にする。
db/migrate/20230206145433_create_articles.rb
変更後、このファイルに
t.references :user
を追加
db/migrate/20230226221434_add_user_id_to_articles.rb
ここでやっていることを前のファイルで実行することになるので、このファイルは不要!
※referencesの意味:名言及;参照,参考文献
db/migrate/20230206145433_create_articles.rb
ここに、
t.references :user, null: false
を追加。これは、ここのカラムには絶対値が入ってないとダメですよ!となる。
よって、ユーザーIDが入っていないと、絶対保存できませんとなる🔥
このアーティクルは、ユーザーIDが絶対紐づくことになる。
t.string :title, null: false
t.text :content, null: false
タイトルやテキストにも、つけることができる。
ターミナルに行きましょう。
$rails db:migrate
DeviseCreateUsers→CreateArticles
となっているのが、確認できます。
db/schema.rb
articlesがあって、usersがある。
そして、user_idにnull: falseオプションがついている。絶対にユーザIDがないとダメだとなる。
ということで、改めて、サインアップ
これで、ユーザーidがないことは、なくなりました👍
目標達成!
ここで、nullオプションはバリデーションとなにが違うのか?
app/models/article.rb
で、validatesのArticleのpresence: trueとなっている。
これは、絶対にタイトルがないと保存しませんよという意味。
ただ、これはアクティブレコードが、そいつがここにないと保存しないよと言っているだけであって、
SQL自体は、保存する。
そのため、アクティブレコードを少しいじれば、validatesがついていても、保存される。
これだと少し不安!
データベースが側に、制限を加えるのがnullオプションである。
こうしておけば、データベースにこの値がないと、何がなんでも保存しない。
これで、安心することができる(^^)