ブログアプリ⑦(記事を編集・削除しよう)
一度投稿した記事を編集or削除できるようにするよ
ところで、記事投稿でつくったコレ使いまわしたいね
……
部分テンプレ〜!テッテレー
まずは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
edit
ついでに削除ボタンもつけちゃう
editの時だけ表示させたいので、elseの中に追加
views/articles/_form.html.haml - else = f.submit "更新するよ" = button_to "削除するよ", { action: "destroy", id: @article.id }, method: :delete, data: { confirm: "消す?" }
できたー
最後にコントローラの中身を少し綺麗にすれば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
これで最低限必要な記事の投稿・表示・編集・削除ができるようになった
次はタグ機能をつくるよ