LoginSignup
1
2

More than 1 year has passed since last update.

RailsのControllerの役割

Posted at

はじめに

基本は備忘録
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")
1
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
1
2