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