記事概要
Ruby on Railsのモデルについて、まとめる
前提
- Ruby on Railsでアプリケーションを作成している
基本情報
ファイルパス
app/models/[モデル名].rb
記載方法
ActiveRecordメソッド
モデルがテーブル操作に関して使用できるメソッドの総称
アソシエーション
モデルを利用したテーブル同士の関連付けのこと
アソシエーションをモデルに定義すると、そのモデルに紐づく別モデルの情報へアクセスできるようになる
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
belongs_toメソッド
「1対1」のつながりがあることを示すメソッド
belongs_to
メソッドで紐付けた他モデルのカラムが存在する場合、他モデルのデータをテーブルに保存できる
belongs_to :モデル名
class Tweet < ApplicationRecord
# 省略
belongs_to :user
end
存在チェック
アソシエーションでbelongs_to
を指定した場合、相手モデルのidが「空ではないか」というバリデーションはデフォルトで設定される
そのため、presence: true
のバリデーションは不要
class Tweet < ApplicationRecord
belongs_to :user
# presence: trueのバリデーションは不要
# validates :user_id presence: true
end
Ruby on Railsまとめ
モデル