1
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?

More than 1 year has passed since last update.

RailsのModelの役割

Posted at

はじめに

基本は備忘録
MVCについて役割ごとにまとめる機会があったので整理します。

Model

modelの役割はDB関連の処理
date取得などの処理や、date自体の作成・削除

新しいテーブルを作成

モデル・マイグレーションファイルが作成される
db/migrate/配下にmigrationファイル
app/models/配下にモデル

# DBに変更を指示するmygration fileを作成
# カラムが複数個ある場合は,は不要 name:string mal:string
rails generate model Post content:text 

# DBに変更を反映 id, created_at, updated_at, は自動生成
rails db:migrate

# データ型
integer 整数
float 少数
string 文字列
text 長い文字列
boolean 真偽値

既存のtableにカラムを追加する

db/migrate配下

# migrationファイルのみを作成
# 中身を記述
# rails db:migrate
 
rails g migration ファイル名 # 関連ある名前にする

migrationファイルの内容を記述

def change
# ここに処理
# 既存のテーブルにカラムを追加する
  add_column :table, :column, :データ型
end

バリデーションを設定

不正なデータがDBに保存されないようにする仕組み
モデルで設定する app/models/配下

# validates :検証するカラム, {検証内容} カラム別に設定
# 空なら弾く, 文字数制限140字
  validates :content, {presence: true, length: {maximum: 140}}
  
  # 重複した登録を防げる
  validates :email, {uniqueness: true}
presence: true #=> 値が存在しているかを確認
uniqueness: true #=> 値が重複していないか
length: {minimum:4} length: {maximum:16}
format: {widh: 正規表現} #=>値のフォーマットを指定
inclusion: {in: [draft]} # 値の候補を指定

エラーメッセージを表示

form_tagのtextareaの上に配置。 エラーがない場合は何も表示されない

# saveメソッドでvalidationに失敗すると、error messageが自動で生成される
# @post.errors.full_messagesの中に配列で入る
# view側でeach文を使ってエラー文を表示する
<% @post.errors.full_messages.each do | message | %>
  <%= message %>
<% end %>

データを操作

# rails consoleや action内で取得する
  post = Post.new(name: '田中', age: 18)
  post.save

  # 変数 = モデル名.条件
  post = Post.first
  post1 = Post.all
  post2 = Post.all[0].content
  post3 = Post.find_by(id: 1)
  post4 = Post.find(1)
  
  post.destroy
1
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
1
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?