destroy_allとは?
すでにテーブルに存在するレコードを一括で削除するメソッドです。
テーブルの状態
usersテーブル(1)にtasksテーブル(多)がhas_manyで紐付いています。
user.rbはこのようになっています。
# == Schema Information
#
# Table name: users
#
# id :bigint not null, primary key
# admin :boolean default(FALSE)
# email :string(255)
# image :string(255)
# name :string(255)
# password_digest :string(255)
# remember_digest :string(255)
# created_at :datetime not null
# updated_at :datetime not null
#
class User < ApplicationRecord
has_many :tasks, dependent: :destroy
accepts_nested_attributes_for :tasks, allow_destroy: true
1対多の場合は1の方(例としてuserとする)has_many :tasks, dependent: :destroyを追加記述することで、userを消したときに紐付いているtaskも削除されるようにできる!
sessions_helper.rbはこのようになっています(ほぼRailsチュートリアルと同じです)
module SessionsHelper
# 記憶トークンcookieに対応するユーザーを返す
def current_user
if (user_id = session[:user_id])
@current_user ||= User.find_by(id: user_id)
elsif (user_id = cookies.signed[:user_id])
user = User.find_by(id: user_id)
if user && user.authenticated?(cookies[:remember_token])
log_in user
@current_user = user
end
end
end
# 渡されたユーザーがログイン済みユーザーであればtrueを返す
def current_user?(user)
user == current_user
end
# 記憶したURL (もしくはデフォルト値) にリダイレクト(フレンドリーフォワーディング)
def redirect_back_or(default)
redirect_to(session[:forwarding_url] || default)
session.delete(:forwarding_url)
end
end
task.rbはこのようになっています
続きを読む →