LoginSignup
0
0

More than 3 years have passed since last update.

【1対多】の関連付け

Posted at

個人的備忘録

ターミナルでモデルの関連付けをするときにいつも忘れるのでメモ。
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

これで関連付けができました。

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