個人的備忘録
ターミナルでモデルの関連付けをするときにいつも忘れるのでメモ。
Attendanceモデルをuserモデルに紐付けたいときに使う。
重要なのは最後の user:references 。
$ rails g model Attendance worked_on:date started_at:datetime finished_at:datetime note:string user:references
以下のt.references :user, foreign_key: true が表示されていればおk
class CreateAttendances < ActiveRecord::Migration[5.1]
def change
create_table :attendances do |t|
t.date :worked_on
t.datetime :started_at
t.datetime :finished_at
t.string :note
t.references :user, foreign_key: true
t.timestamps
end
end
end
$ rails db:migrate
結果。
# This file is auto-generated from the current state of the database. Instead
# of editing this file, please use the migrations feature of Active Record to
# incrementally modify your database, and then regenerate this schema definition.
#
# Note that this schema.rb definition is the authoritative source for your
# database schema. If you need to create the application database on another
# system, you should be using db:schema:load, not running all the migrations
# from scratch. The latter is a flawed and unsustainable approach (the more migrations
# you'll amass, the slower it'll run and the greater likelihood for issues).
#
# It's strongly recommended that you check this file into your version control system.
ActiveRecord::Schema.define(version: 20190523135500) do
create_table "attendances", force: :cascade do |t|
t.date "worked_on"
t.datetime "started_at"
t.datetime "finished_at"
t.string "note"
t.integer "user_id"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.index ["user_id"], name: "index_attendances_on_user_id"
end
create_table "users", force: :cascade do |t|
t.string "name"
t.string "email"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.string "password_digest"
t.string "remember_digest"
t.boolean "admin", default: false
t.string "department"
t.datetime "basic_time", default: "2019-05-22 23:00:00"
t.datetime "work_time", default: "2019-05-22 22:30:00"
t.index ["email"], name: "index_users_on_email", unique: true
end
end
最後に格モデルに対してコードを記述するのを忘れずに。
class User < ApplicationRecord
has_many :attendances, dependent: :destroy
class Attendance < ApplicationRecord
belongs_to :user
これで関連付けができました。