目次 閉じる
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)
    endcreateアクションと同様、フォーム内の: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

