ブログアプリ⑦(記事を編集・削除しよう)

一度投稿した記事を編集or削除できるようにするよ

ところで、記事投稿でつくったコレ使いまわしたいね

f:id:d_riko:20181202155826p:plain

……

部分テンプレ〜!テッテレー

まずはnewのビューファイルに直接書いたフォーム部分を切り出したげる

views/articles/_form.html.haml

= form_for @article do |f|
  = f.text_field :title, placeholder: "タイトルだよ"
  %br
  = f.text_area :text, placeholder: "本文だよ"
  %br
  = f.select :status, Article.article_statuses
  %br
  = f.submit "送信するよ"

空っぽになったnewのビューファイルではテンプレ化したファイルを呼び出すようにする

views/articles/new.html.haml

= render partial: 'form'

さらに編集用のビューファイルを作って、同じテンプレファイルを呼び出す

views/articles/edit.html.haml

= render partial: 'form'

さらにさらに送信ボタンの表示をアクションによって変えるよ

これを

views/articles/_form.html.haml

  = f.submit "送信するよ"

こうして

views/articles/_form.html.haml

  - if action_name == "new"
    = f.submit "送信するよ"
  - else
    = f.submit "更新するよ"

こうじゃ

new f:id:d_riko:20181203092759p:plain

edit f:id:d_riko:20181203092808p:plain

ついでに削除ボタンもつけちゃう

editの時だけ表示させたいので、elseの中に追加

views/articles/_form.html.haml

  - else
    = f.submit "更新するよ"
    = button_to "削除するよ", { action: "destroy", id: @article.id }, method: :delete, data: { confirm: "消す?" }

f:id:d_riko:20181203093132p:plain

できたー

最後にコントローラの中身を少し綺麗にすればOK

controllers/articles_controller.rb

class ArticlesController < ApplicationController
  before_action :set_article, only: [:show, :edit, :destroy]

  def index
    @articles = Article.where(status: 1).order("created_at DESC")
  end

  def new
    @article = Article.new
  end

  def create
    @article = Article.new(article_params)
    @article.save
    redirect_to new_article_path
  end

  def show
  end

  def edit
  end

  def update
  end

  def destroy
    @article.destroy
    redirect_to articles_path
  end

  private
  def article_params
    params.require(:article).permit(:title, :text, :status)
  end

  def set_article
    @article = Article.find(params[:id])
  end
end

これで最低限必要な記事の投稿・表示・編集・削除ができるようになった

次はタグ機能をつくるよ