Railsの学習を始めるにあたって、基本的な動作である、CRUD処理を学習してみた。現段階の理解度を確認する意味を込めてCRUD処理とActive Recordについてひも解いてみる。
#目次
1.守破離の「守」一番大事な基礎であるCRUD処理の勉強。
[2.Active Recordとお友達になる。](#2-Active Recordとお友達になる。)
3.CRUD処理を噛み砕く
4.まとめ
5.参考文献
#1. 守破離の「守」一番大事な基礎であるCRUD処理の勉強。
まず、Railsガイドを読みながら理解を深めた。
中でもmodelでテーブルが作られる仕組みは、全然頭に入ってこない。
#2. Active Recordとお友達になる。
Active RecordがRailsのMVCに置けるMの役割を果たしているそうだ。
Railsガイドによると、その中でも重要な機能を抜粋すると以下の5つになる。
モデルおよびモデル内のデータを表現する
モデル同士の関連付け(アソシエーション)を表現する
関連付けられているモデル間の継承階層を表現する
データをデータベースで永続化する前にバリデーション(検証)を行なう
データベースをオブジェクト指向スタイルで操作する
正直言ってよく分からない。今理解できていることを下記にまとめてみた。
- モデル名は単数、テーブルのカラム名は複数かつキャメルケースで表示される。
- モデルの中にテーブルを作成し、その中に属性を入れ込んでいく。
モデルの作成
$ 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
findはidによってモデルオブジェクトに対応するレコードを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. 参考文献