0
2

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 3 years have passed since last update.

Ruby on RailsでCRUD処理をしてみる

Last updated at Posted at 2021-07-31

Railsの学習を始めるにあたって、基本的な動作である、CRUD処理を学習してみた。現段階の理解度を確認する意味を込めてCRUD処理とActive Recordについてひも解いてみる。

#目次
1.守破離の「守」一番大事な基礎であるCRUD処理の勉強。
[2.Active Recordとお友達になる。](#2-Active Recordとお友達になる。)
3.CRUD処理を噛み砕く
4.まとめ
5.参考文献

#1. 守破離の「守」一番大事な基礎であるCRUD処理の勉強。

まず、Railsガイドを読みながら理解を深めた。

Active Record の基礎 - Railsガイド

中でもmodelでテーブルが作られる仕組みは、全然頭に入ってこない。

#2. Active Recordとお友達になる。

Active RecordがRailsのMVCに置けるMの役割を果たしているそうだ。

Railsガイドによると、その中でも重要な機能を抜粋すると以下の5つになる。

モデルおよびモデル内のデータを表現する

モデル同士の関連付け(アソシエーション)を表現する

関連付けられているモデル間の継承階層を表現する

データをデータベースで永続化する前にバリデーション(検証)を行なう

データベースをオブジェクト指向スタイルで操作する

正直言ってよく分からない。今理解できていることを下記にまとめてみた。

  1. モデル名は単数、テーブルのカラム名は複数かつキャメルケースで表示される。
  2. モデルの中にテーブルを作成し、その中に属性を入れ込んでいく。

モデルの作成
$ bin/rails g model Genba name:string description:text
g modelコマンドを実行することで生成されるクラス。
class CreateGenbas < ActiveRecord::Migration[]
 def change
  create table :genbas do |t|
  t.string :name
  t.text :description

  t.timestamps
  end
 end
end
);

これで、以下のようにテーブルに格納する項目を追加することができる

p = Genba.new
p.name = "Some Book"
puts p.name # "Some Book"

#3. CRUD処理を噛み砕く

Create 登録機能

def create
 genba = Genba.new(genba_params)#=>privateを呼び出している
 genba.save!
 redirect_to genbas_url, notice: "タスク「#{genba.name}を登録しました。"#=>登録したらrootURLにリダイレクトされる
end

private
def genba_params
 params.require(:genba).permit(:name, :description)#=>:nameと:descriptionのみ許可している
end
.container
  - if flash.notice.present?
    .alert.alert-success= flash.notice 
#=>これでcreateアクションが完了した時にflashが発行される。

Read 一覧表示機能

def index 
 @genbas = Genba.all
end
この時はまだSQL文は発行されていない。view@genbas.each doのように呼び出された時に初めて
SQL文が実行される。
index.html.slim

- @genbas.each do |genba|
  tr
    td= genba.name
    td= genba.created_at
こうすることでViewで一覧を表示することができる。

Show 検索機能

def show
 @genba = Genba.find(params[:id])
end
findidによってモデルオブジェクトに対応するレコードをDBから検索している。
引数としてparams[:id]を設定している。
params[:id]には、リクエストされたURL"genbas/[タスクのid]"[タスクのid]の部分が格納されている。

Update 更新機能

model
def update
    genba = Genba.find(params[:id])
    genba.update!(genba_params)
    redirect_to genbas_url, notice: 'タスク「#genba.name」を更新しました。'
  end

view

Edit 編集機能

def edit 
 @genba = Genba.find(params[:id])
end
= link_to '編集する', edit_genba_path(genba), class: 'btn btn-primary mr-3'

Delete 削除機能

model

def destroy
  genba = Genba.find(params[:id])
  genba.destroy
  redirect_to genbas_url, notice: "タスク「#{genba.name}」を削除しました"
end

view
= link_to '削除', genba, method: :delete, date: { confirm: "タスク「#{genba.name}」を削除します。よろしいですか?} ,class: 'btn btn-danger'

Partialを使用したモデルの設定方法

view

= render partial: 'form', **locals: {genba: @genba} #=>「インスタンス変数@genbaをパーシャル内のローカル変数genbaをして渡す」**

_form.html.slim

=form_with model: genba, local: true do |f|
 .form-group
   = f.label :name
   = f.text_field :description, class: 'form-control', id:'genba_description'

#4. まとめ
簡単な掲示板アプリの作成に必要な考えを学べた。
C 作成処理
R 一覧表示やホーム画面表示
U 更新処理
D 削除処理
次はルーティングに関して勉強したい。

#5. 参考文献

0
2
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
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?