プログラミングのメモ帳

自分のメモとして残したいアウトプット

Userモデルに紐付くModelの作り方

かなり基本の部類に入るとは思うがUserモデルに紐づくModel
(例えばPostだったりTaskだったりTweetだったりする)
の作り方を確認してみる

Modelの生成

まずはgenerate(カラムはお好み)

$ rails g Model Post title:string content:text user:references

user:referencesをつけることでmigrationファイルに

t.references :user, foreign_key: true

が追記されます。
さらにmodels/post.rbに

belongs_to :user

が追記されています。
userテーブルに対して外部キーが設定されますのでPostとUserの整合性が保たれます。
また、下記のようにインデックスを貼っておくのが定石のようです。

#user_idとcreated_atに対してインデックスを追加
add_index :posts, [:user_id, :created_at]

Migrationとmodels/user.rbの編集

そしてmigration

$ rails db:migrate

またuser.rb側でも関連付けを行います。
(dependent: :destoryは親を削除した時に関連する子も削除する設定)

has_many :posts, dependent: :destroy

これによりUserのインスタンスからPostモデルにアクセスできるようになりましたので
user_controllerでは関連付けを利用してモデルへアクセスしましょう。