0
0

More than 3 years have passed since last update.

Rails consoleで別のテーブルの_idとの結び付け

Posted at

今回は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が上手くいきました。

初歩的なミスですが、メモを残す事によって、久しぶりにやった際に忘れないようにという思いで書きました。

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