学習記録

アウトプット用に作りました

Active Recode(自分用メモ)

基礎編前の課題で、忘れていたこと、知らなかったことなどのまとめ。


複数レコードを一括削除したい場合は、destroy_byまたはdestroy_allを使える。

# Davidという名前のユーザーを検索してすべて削除
User.destroy_by(name: 'David')

# 全ユーザーを削除
User.destroy_all


Active Recordのnew_record?インスタンスメソッドを使うと、
オブジェクトが既にデータベース上にあるかどうかを確認できる。

$ bin/rails console
>> p = Person.new(name: "Taro")
=> #<Person id: nil, name: "Taro", created_at: nil, updated_at: nil>
>> p.new_record?
=> true
>> p.save
=> true
>> p.new_record?
=> false


6文字以上20文字以下のパスワード入力のバリデーション

validates :password, length: { in: 6..20 }


バリデーションを設定しても、データベースには制約がかかっていないため、
SQLを直接実行するとアプリケーションで作成できない形式のデータが作成できてしまう。
すでに作ってあるテーブルのカラムに後から制約をつけるときは、
マイグレーションファイルを自分で作るか、②既存のマイグレーションファイルを直接編集する。

(例) Not Null制約 (nullをデータベースに格納しない)

rails g migration ChangeTasksNameNotNull

# 生成したファイルの中身を書き換える
change_column_null :tasks, :name, false

# 既存のマイグレーションファイル
t.string :name, null: false


アソシエーションの機能を使うと、2つのモデルの間に繋がりを作ることができる。
投稿とコメントを結びつけてみる。1対多。

class Post < ApplicationRecord
  # dependent: :destroy を使う。投稿を削除したらコメントも削除される。
  has_many :comment, dependent: :destroy
end

class Comment < ApplicationRecord
  belongs_to :post
end