※本サイトで紹介している商品・サービス等の外部リンクには、アフィリエイト広告が含まれる場合があります。
CRUD(クラッド)とは
Create・Read・Update・Delete のこと
Webアプリケーションの基本的な機能をすべて備えているものを「CRUDアプリ」という
Update
「Update」(PUTリクエスト)のupdateアクションを編集する
- データを変更する
※ プットのことをパッチと呼ぶ人もいる 違いは特にない
前回、記事編集のeditアクションを定義したところ
updateアクション:該当ページの編集・更新をする
記事を編集する
config/routes.rbにコードを追加する
resources :articles,
only: [:show, :new, :create, :edit, :update]
もともとあったarticle_path「GET」の下に、「PATCH」と「PUT」が生まれている
urlは同じだがリクエストが異なる
- GET → 記事を表示する
- PATCH → 記事を更新する
edit.html.erbはnew.html.erbとほぼ同じになる
newのままだと以下のとおりになる
<%= form_with(model: @article, url: articles_path, method: 'post', local: true) do |f| %>
前回editアクションで設定済み
該当:idの記事が初期表示されるようになっているので、このままでok
「url: articles_path, method: ‘post’」のままだと「POST」リクエストされてしまう
↓「url: article_path, method: ‘put’」に書き換える
さらに「:id
」を渡す必要があるので、article_path(@article)
となる
最終的のコードは以下のとおりになる
<%= form_with(model: @article, url: article_path(@article), method: 'put', local: true) do |f| %>
railsは賢いので、実はurlとmethodは省略しても察してくれる
<%= form_with(model: @article, local: true) do |f| %>
updateアクション
app/controllers/article_controller.rbで以下のコードを書く
def update
@article = Article.find(params[:id])
if @article.update(article_params)
redirect_to article_path(@article),
notice: '更新できました'
else
flash.now[:error] = '更新できませんでした'
render :edit
end
end
どの記事を編集するのか?
→ @article = Article.find(params[:id])
で対象のarticleを探す
PUTリクエストされると同時に:idも渡されるので、(params[:id])
で受け取る
該当の記事をArticle.find
で探し、@article
に入れて編集可能にする
.update
で値を更新できるようになっている(.save
と似ている)
updateの中身は、private内で定義した(article_params)
を指定する
private
def article_params
params.require(:article).permit(:title, :content)
end
createアクションと同様、フォーム内の:title
、:content
をデータベースに保存させることができる
if @article.update(article_params)
redirect_to article_path(@article),
notice: '更新できました'
- 記事の詳細ページ
article_path(@article)
へ遷移redirect_to
する - 「更新できました」とFlash表示
notice:
させる
else
flash.now[:error] = '更新できませんでした'
render :edit
- 「更新できませんでした」とFlash表示
flash.now[:error]
させる :edit
(edit.html.erb)のviewを表示render
させる
#DAY13