はじめに
基本は備忘録
MVCについて役割ごとにまとめる機会があったので整理します。
Controller
ModelやViewとdateのやりとりをする
CRUD(クラッド)処理
システムに必要な4つの主機能
C Create # データの作成
R Read # データの読み込み
U Update # データの更新
D Delete # データの削除
railsは7つを推奨している
index # データの一覧を表示する
new # データを新規作成するためのフォームを表示
create # データを新規作成し、データーベースへ保存
show # 指定したデータを表示
edit # データを更新するためのフォームを表示
update # データ更新
destroy # データ削除
一覧データの表示と作成
index
# DBから全てのデータ(@posts)を取得しViewに返却
#.order(created_at: :desc)で並び替え
@posts = Post.all
new
# インスタンス変数(@post)を作成し、それをViewへ返却
@post = Post.new
create
# Viewからの送信値(params)を元にデータを作成し、DBへ保存
# formの内容をparamsを使って取得している
@post = Post.new(params[:xx])
@post.save
Post.create(params[:xx])
データの更新と削除
show
# 投稿の詳細を表示
# Viewからの送信値(params)を元にデータを探し、それをViewへ返す
@post = Post.find(params[:id])
edit
# Viewからの送信値(params)を元にデータを探し出し、Viewに返却
# View側でデータを更新するためのフォームを表示
@post = Post.find(params[:id])
update
# Viewからの送信値(params)を元にデータを更新します
@post = Post.find(prams[:id])
@post.update(params[:id])
destroy
# Viewからの送信値(params)を元にデータを探し出し、削除
@post = Post.find(params[:id])
@post.destroy
応用機能4つ
before_action
アクションが実行される前に何らかの処理を行う
# postsコントローラで共通させたい処理
# postsコントローラでbefore_actionを記述
# 全てのコントローラで共通させたい処理
# applicationコントローラに記述
before_action :set_current_user
def set_current_user
@current_user = User.find_by(id: session[:user_id])
end
# 特定のアクションで利用
# Application..で定義したメソッドは
# 継承元で定義したメソッドなので利用できる
before_action :authenticate_user, {only: [:edit, :update]}
strong Parameter
form等からの不必要な情報を受け付けないように設定できる
ハッキング対策
params.require(:モデル名).permit(:カラム名, :カラム名2)
フラッシュメッセージ
# 次のアクションまで表示
flash[:notice] = "表示したい文字列"
## 失敗した時
flash.now[:notice] = "表示したい文字列"
# view側 application... <body>最上部
# flashメッセージがある時のみ表示する
<% if flash[:notice] %>
<div class="flash">
<%= flash[:notice] %>
</div>
<% end %>
redirect_to / render
controllerの経由回数が違うのでflashの使い方に気をつける
redirect_to
# レダイレクトする 引数はrouting
redirect_to("/posts/index")
render
# 他のactionを経由せず、現在のactionの@変数を使える
# renderはrender("フォルダ名/ファイル名")
render("posts/edit")