0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Rails】[モデル名].rbについて

Last updated at Posted at 2025-04-07

記事概要

Ruby on Railsのモデルについて、まとめる

前提

  • Ruby on Railsでアプリケーションを作成している

基本情報

ファイルパス

app/models/[モデル名].rb

記載方法

ActiveRecordメソッド

モデルがテーブル操作に関して使用できるメソッドの総称

アソシエーション

モデルを利用したテーブル同士の関連付けのこと
アソシエーションをモデルに定義すると、そのモデルに紐づく別モデルの情報へアクセスできるようになる

Image from Gyazo

N+1問題

アソシエーションを利用した場合に限り、データベースへのアクセス回数が多くなってしまう問題であり、アプリケーションのパフォーマンス低下につながる

includesメソッドを使用することで、解消される

まとめ(データ取得)

whereメソッド

詳細は、こちらを参照

def self.search(search)
  if search != ""
    Tweet.where('text LIKE(?)', "%#{search}%")
  else
    Tweet.all
  end
end

if search != ""は、検索フォームに何か値が入力されていた場合にtrueとなる

まとめ(入力制約)

validatesメソッド

バリデーションを設定する時に使用するメソッド

validates :カラム名, バリデーションの種類

presenceオプション

空欄の場合、エラー発生

# カラムが「空ではないか」というバリデーションを設定
# 空欄で登録しようとすると、エラー発生
validates :カラム名, presence: true

まとめ(アソシエーション)

has_manyメソッド

「1対多」のつながりがあることを示すメソッド

has_many :モデル名の複数形
class User < ApplicationRecord
  # 省略
  has_many :tweets
end

Image from Gyazo

belongs_toメソッド

「1対1」のつながりがあることを示すメソッド

belongs_toメソッドで紐付けた他モデルのカラムが存在する場合、他モデルのデータをテーブルに保存できる

belongs_to :モデル名
class Tweet < ApplicationRecord
  # 省略
  belongs_to :user
end

Image from Gyazo

存在チェック

アソシエーションでbelongs_toを指定した場合、相手モデルのidが「空ではないか」というバリデーションはデフォルトで設定される
そのため、presence: trueのバリデーションは不要

class Tweet < ApplicationRecord
  belongs_to :user
  # presence: trueのバリデーションは不要
  # validates :user_id presence: true
end

Ruby on Railsまとめ

モデル

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?