0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

ユーザーと記事を紐付け③

Posted at

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オプションである。

こうしておけば、データベースにこの値がないと、何がなんでも保存しない。

これで、安心することができる(^^)

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?