こんにちは。
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テーブルに格納されているデータがあります。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
belongs_to :user
belongs_toで、モデルに対応したテーブルに格納されている情報を参照先に指定しており
この場合、booksテーブルに格納されているuser_id(ここでは外部キーを省略できます)、
例えばuserIDが1だった場合、usersテーブルからuser_id1の情報を参照しています。
bookから見て、bookを投稿したuserは一人なので、
一つのuser_idを持つデータをUsersテーブルから参照しています。
has_many :books
has_manyでuserは複数book情報を持っており、booksテーブルを参照先に指定しています。
この場合、複数のbooksテーブルに格納されているレコード'title, body, user_id'を参照先に指定しており、
userは複数のbooksテーブルに格納されたレコードを参照できます。
userから見て、userはbookを複数投稿できて、
userは複数のbooksテーブルのレコードを参照先に指定しています。
book.user
このような記述があった場合、booksテーブルに格納されているレコードの中のuser_idを参照している(かもしれないです)