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を久しぶりに触ったので整理してみた

Last updated at Posted at 2022-07-31

概要

開発時に使用するメモを整理しました。

Rail APIモードでの始め方

  1. bundle init
  2. gemfileを修正
  3. bundle install
  4. rails new . --api -d postgresql
  5. gibo dump Rails macOS >> .gitignore
  6. rails db:create

5番のgiboは.gitignoreを簡単に充実してくれるパッケージ。
vendor/bundle.DS_storeなどをよしなに設定してくれる
brew経由でinstallした気がする 興味があれば調べてみてください

Model

DB関係の処理を担う

新しいモデル・テーブルを作成

# 引数を与えてmigrationの中身を埋める
rails g model User[任意のモデル名] name:string age:integer

# Modelを作成
rails g model user(任意のモデル名)

# 間違えたら下記で削除
rails d model user(任意のモデル名)

バリデーション

# validates :カラム名, ルール

# not null
validates :content, {presence: true}

# booleanが空ではない
validates :bool, inclusion: { in: [true, false] }

# チェックボックス
validates :gender, {acceptance: true}

# 一意性(ユニーク)
validates :user_name, uniqueness: true

# 2つのカラムが一致していることを確認
validates :email, confirmation: true
長さ
# 最大140文字(140文字以下)
validates :content, {length : {maximum:140} }

# 50文字以上
validates :content, {length : {minimum:50} }

# 1文字以上75文字以下
validates :content, {length: {in: 1..75} }

# 5文字のみ
validates :content, {length: {is: 5} }
含まれる or 含まれない
# 含まれるか チェック
validates :kind, inclusion: { in: %w(draft publish private) }

# 含まれないか チェック
validates :subdomain, exclusion: { in: %w(www us ca jp) }
メールアドレス
VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i
validates :email, presence: true, uniqueness: true, format: { with: VALID_EMAIL_REGEX }

関連性

Modelを互いに関連づける
ModelはDB設計と密に連携する。 DB側でも外部キーの設定などをする必要有

# UserとTweetの関連づけを想定

# User (複数の投稿を保持)
has_many :tweets, dependent: :destroy

# Tweet (userに依存する)
belongs_to :user
Controlelr側で下記が使えるようになる
# ツイート作成
@tweet = Tweet.create(tweet_params)

# ツイート一覧
@user = User.find(params[:id])
@tweets = @user.tweets

# ツイートしたユーザー
@tweet.user

Controller

ModelとViewに値を渡す

ViewとControllerを作成
# 作成 (複数形にする)
rails g controller users index show

# 削除 (生成されたroutingは残る)
rails destroy controller users
controller file
# index
@user = User.all

# show
@user = User.find(params[:id])

# new (formに渡す用)
@user = User.new

# create
@user = User.new(params[:xx])
@user.save
User.create(params[:xx]) # 1行でまとめられる

# edit (編集対象を見つけてviewに返却)
@user = User.find(params[:id])

# update
@user = User.find(params[:id])
@user.update(params[:id])

# destroy
@user = User.find(params[:id])
@user.destroy

before_action

アクションが実行される前に何らかの処理を行う

# 適応したいControllerで定義
# application Controllerで定義すると全体に適応可能
# 重複した処理などはprivateで最下部でメソッド化すると良い
# Actionが走る前にメソッドが走る
before_action :メソッド名

# 特定のActionが走る前
before_action :メソッド名, only: [:index, :update]

# 除外したAction以外が入る前
before_action :メソッド名, except: :index

strong Parameter

# 受け付けるparameterを定義する (ハック対策)
@user = User.new(user_params)
private
  def user_params
    params.require(:モデル名).permit(:カラム名, :カラム名)
  end

フラッシュメッセージ

# 次のアクションまで表示
flash[:notice] = "表示したい文字列"

## 失敗した時
flash.now[:notice] = "表示したい文字列"

リダイレクト

controllerの経由回数が違うのでflashの使い方に気をつける

redirect_to
# レダイレクトする 引数はrouting
redirect_to("/posts/index")

# 省略した書き方 記述したControllerのnewアクションへ
redirect_to 'new'
render
# 他のactionを経由せず、現在のactionの@変数を使える
# render("フォルダ名/ファイル名")
render("posts/edit")
redirect_back(直前の画面へ)
# redirect_back fallback_location: 直前のページに戻れなかった際のパス
redirect_back fallback_location: root_path

migration

DBのテーブルを作成するファイル
migrationFile → DBの設計図
model → データの説明 app/models/<モデル名.rb>

2通りの作成方法
# db/migrate配下にmigrationファイルを作成
rails g migration [任意のmigration]

# Modelとmigrationファイルを同時に生成
rails g model <Model># 単数系
migration file
# 特に制約をつけない基本の指定
def change
  create_table :Products do |t|
   #t.型の名前 :カラムの名前
    t.string  :name
    t.text    :description
    t.integer :price
    t.timestamps
  end
end
not null
def change
  create_table :Products do |t|
   #t.型の名前 :カラムの名前, 制約: 許可、非許可
    t.string  :name, null: false
    t.text    :description, null: false
    t.integer :price, null: false
    t.timestamps
  end
end
外部キーを付与する
# imagesテーブルがあることを想定
def change
  create_table :Products do |t|
    t.string  :name
    t.text    :description
    t.integer :price

   #t.reference型 :紐付けたいテーブル名, 外部キー制約の設定
    t.references :image, foreign_key: true
    t.timestamps
  end
end
カラムを追加
def change
#add_column :カラムを追加するテーブル名, :新しく追加するカラム名, :型
  add_column :products, :size, :string
end
カラムを削除
# 削除の際は型を指定するのがポイント
def change
#remove_column :テーブル名, :削除するカラム名, :型
  remove_column :products, :description, :text
end
カラム名を変更
# 間違えて作成した「prise」カラムを「price」に変更する想定
def change
#rename_column :テーブル名, :変更前のカラム名, :変更後のカラム名
  rename_column :products, :prise, :price
end
カラムのデータ型を変更
# 「string」から「integer」に変更する想定
def up
 #change_column :テーブル名, :型を変更したいカラム名, :変更後のデータ型
  change_column :products, :price, :integer
end

def down
 #change_column :テーブル名, :型を戻すカラム名, :変更前のデータ型
  change_column :products, :price, :string
end
後からnot null制約
def change
#change_column_null :テーブル名, :制約を設定するカラム名, :null許可、非許可
  change_column_null :posts, :name, false
end
一意性(uniq)
# indexを付与することによって全件検索を避ける
# 辞書でいう所の索引を用意してパフォーマンスを上げる
def change
  add_index :users, :email, unique: true
end

データ型

integer 整数
float 少数
string 文字列
text 長い文字列
boolean 真偽値

参考

アソシエーション[関連性]
バリデーション
関連づけ Railsガイド
before_action
【Rails】基本的なマイグレーションファイルの書き方 - ユウマのブログ

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?