0
1

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.

belongs_to,とhas_manyを使ったDBへの参照先指定( アソシエーション)

Last updated at Posted at 2022-06-08

こんにちは。
modelはDBの情報を動かすために、DBに格納されている情報を引き出してくる役割がありますが、

今回は、アソシエーションの1:Nの関係を紐づけるときに使われる
has_manyとbelongs_toについてざっくりと掘り下げてみることにしました。

開発環境

  • Cloud9
  • Rails 6.1.4

ターミナルでの作業手順

1.rails g model コマンドでマイグレーションファイルの作成
→マイグレーションファイルのテーブル内容を編集
(この時点でテーブルはまだ作成されていない)

2.rails db:migrate
→マイグレーションファイルからテーブルを作成

belongs_toとhas_many

 例として、booksテーブルとUsersテーブルに格納されているデータがあります。
Schema.rb
create_table "books", force: :cascade do |t|
    t.string "title"
    t.text "body"
    t.integer "user_id"
    :
  end
...
  create_table "users", force: :cascade do |t|
    :
    t.string "name"
    t.text "introduction"
    :
  end
book.rb
belongs_to :user

belongs_toで、モデルに対応したテーブルに格納されている情報を参照先に指定しており
この場合、booksテーブルに格納されているuser_id(ここでは外部キーを省略できます)、
例えばuserIDが1だった場合、usersテーブルからuser_id1の情報を参照しています。

bookから見て、bookを投稿したuserは一人なので、
一つのuser_idを持つデータをUsersテーブルから参照しています。

user.rb
has_many :books

has_manyでuserは複数book情報を持っており、booksテーブルを参照先に指定しています。
この場合、複数のbooksテーブルに格納されているレコード'title, body, user_id'を参照先に指定しており、
userは複数のbooksテーブルに格納されたレコードを参照できます。

userから見て、userはbookを複数投稿できて、
userは複数のbooksテーブルのレコードを参照先に指定しています。

books_controller.rb
book.user

このような記述があった場合、booksテーブルに格納されているレコードの中のuser_idを参照している(かもしれないです)

0
1
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
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?