本投稿の目的
・Rails学習の議事録です。学習に使った教材
Udemyの以下2つの教材を参考にまとめました。 ・["はじめてのRuby on Rails入門-RubyとRailsを基礎から学びWebアプリケーションをネットに公開しよう"](https://www.udemy.com/course/the-ultimate-ruby-on-rails-bootcamp/) ・["フルスタックエンジニアが教える 即戦力Railsエンジニア養成講座"](https://www.udemy.com/course/rails-kj/)○1対多とは?
・紐づいたmodel間での関係の名称 ・ex)ツイートmodelとコメントmodle ・この時,ツイート1つに対して複数コメントが可能 ・この関係を"1対多"の関係と呼ぶ【説明の簡略のために書き省略記号を使用】
・素となるmodel = model(1)
・紐づくmodel = model(多)
*(コーディング例では任意のmodel名が入る)
【1対多の関係におけるmodel関係の名称を2つ示す】
・has many = model(1)から見たmodel(多)の関係
・belongs to = model(多)からみたmodel(1)の関係
○model(他)作成後の操作
①model(多)の作成
rails g model model(多) model(1):references column情報
【解説】
○model(1): references
⇨ referencesでmodel(1)を紐けるように設定
⇨ これで,model(多)には, model名(1)_id というcolumnが作成される
【例:Q&Aアプリケーションのmodelを想定】
rails g model answer questin:references column情報
【解説】
⇨ answer model へ question model を紐付ける
⇨ questionのcolumnに answer_id が作成される
②model(多)のmigrationファイルへの記述
・model(多)を紐づけで作成しておけば自動記述されるclass Create+model(多) < ActiveRecord::Migration[5.0]
def change
create_table :model(多)s do |t|
t.references :model(1), foreign_key: true
t.string :column名1, null: false
t.text :column名2, null: false
t.timestamps
end
end
end
【解説】
○null: faluse
⇨ column値に 空 を受け付けない
○t.reference :model(1), foreign_key: true
⇨ model(1)のid にないと,model(1)_idとしてmodel(多)で保存できない
③model(多)のdbの作成
rails db:migrate
④model(多)のmodelファイルへの記述(自動記述)
・model(多)作成時に,以下が,model(多)のmodelファイルへ自動で記述されるclass model(多) < ApplicationRecord
belongs_to :model(1)
end
【解説】
○belongs_to :model(1)
⇨ (*model(1)名称は単数係)
【例:answer modelに紐づくquestion modelの場合】
class Answer < ApplicationRecord
belongs_to :question
end
○belongs_to :question⇨ 親がmodel(1) で 子がmodel(多)
⇨ (model(多)から見るとmodel(1)は1つに定まる)
⇨ (子供は複数人いるが,親や一位に定まるというイメージ)
⑤model(1)のmodelファイルへの記述(手動記述)
・model(1)については,追加で以下の記述を追加する has_many :model(多)s, dependent: :destroy
【解説】
○has_many :model(多)s
⇨ 一番上の行に記述する
⇨ (*モデル名(多)は複数形)
○dependent: :destroy
⇨ model(1)が削除されると紐づいたmodel(多)は自動で消される という設定
【例:Answerの素となるQuesitionの場合】
class Question < ApplicationRecord
has_many :answers, dependent: :destroy
end
⑥rails routesの更新
・config/routes.rb ファイルを開く ・内容を次のように更新 (do 移行が追加で更新する部分) *(model名は複数形)resources :model(1)s do
resources :model(多)s
end