今回はRailsコンソール
を使ってトークルームにカテゴリーを紐付ける際に、初歩的なミスで試行錯誤するはめになってしまったので、メモとして残したいと思います。
まずは、コンソールで入力した結果を先に表示したいと思います。
2.5.3 :001 > user = User.first
(7.5ms) SET NAMES utf8, @@SESSION.sql_mode = CONCAT(CONCAT(@@sql_mode, ',STRICT_ALL_TABLES'), ',NO_AUTO_VALUE_ON_ZERO'), @@SESSION.sql_auto_is_null = 0, @@SESSION.wait_timeout = 2147483
User Load (0.2ms) SELECT users
.* FROM users
ORDER BY users
.id
ASC LIMIT 1
=> #
2.5.3 :002 > memo_room = user.memo_rooms.build(title: 'hello')
=> #
2.5.3 :003 > category = Category.first
Category Load (0.2ms) SELECT categories
.* FROM categories
ORDER BY categories
.id
ASC LIMIT 1
=> #
2.5.3 :004 > memo_room = user.memo_rooms.build(title: 'hello', category_id: category.id)
=> #
2.5.3 :005 > memo_room.save
(0.3ms) BEGIN
Category Load (0.3ms) SELECT categories
.* FROM categories
WHERE categories
.id
= 1 LIMIT 1
MemoRoom Create (0.2ms) INSERT INTO memo_rooms
(title
, user_id
, category_id
, created_at
, updated_at
) VALUES ('hello', 1, 1, '2020-01-26 10:24:56', '2020-01-26 10:24:56')
(2.7ms) COMMIT
=> true
2.5.3 :006 >
・まず最初にuser = User.firstで 最初のユーザーを表示します。
・次にmemo_room ←トークルームと考えてください。にuser.memo_rooms.buildでタイトルhelloを作成します。
・これで、memo_roomのタイトルが作成されました。
・次に、このmemo_roomにはcategoryが紐づいているので、今の状態だとcategoryが紐付けされていないのでsaveは出来ません。
errorメッセージ表示をすると、categoryが必須です。と出ている状態です。(memo_room.errors.full_messages←で設定してあるのでコンソールに入れるとcategoryが必要な表示が出ます。)
・次にcategoryが作成されていなかったので、category(カラムはtitle) ←カテゴリを同じように作成します。(流れ同じなので略)
・そしてmemo_room = user.memo_rooms.build(title: 'hello', category_id: category.id)
memo_roomにcategory_idを入れてあげます。 category_idは数字であり文字列ではないので''は使いません。
上記の時に、memo_room ←の変数に代入を忘れていました。
ただcategory_idを入れてるだけを繰り返し。無意味に悩んでいたのです。
user.memo_rooms.build(title: 'hello', category_id: category.id) ←変数なしでただ作ってるという意味ない事をしてました。
変数にきちんと入れれば、 usersテーブル、memo_roomsテーブル、categoriesテーブルの3つのidが入り。
きちんと紐付けされて結果saveが上手くいきました。
初歩的なミスですが、メモを残す事によって、久しぶりにやった際に忘れないようにという思いで書きました。