Yuki Matsumoto

To be engneer soon / Ruby on Rails

削除機能を追加する

2019-02-20 Yuki MatsumotoRuby on Rails

今日は削除機能を実装していきます。まずは削除リクエストを送るためのボタンを作成します。場所はedit.html.erbです。

<h2>Edit</h2>

<%= render "form" %>

<%= link_to "Delete", idea_path(@idea.id), method: :delete %>
<%= link_to "Back", ideas_path %> 

第一引数にアンカーテキスト、第二引数にリンク先URL、第三引数はオプションでキーを渡してHTMLメソッドを指定します。※公式リファレンス

destroyアクションを追加する

ideas_controller.rbからdestroyアクションを追加します。

class IdeasController < ApplicationController
  def index
    @ideas = Idea.all
  end

  def show
  end

  def new
    @idea = Idea.new
  end

  def create
    @idea = Idea.new(idea_params)
    if @idea.save
      redirect_to ideas_path, notice: 'Success!'
    else
      flash[:alert] = 'Save error!'
      render :new
    end
  end

  def edit
    @idea = find_idea_by_id
  end

  def update
    @idea = find_idea_by_id
    @idea.update(idea_params)
    redirect_to ideas_path
  end

  def destroy
  end

  private
    def idea_params
      params.require(:idea).permit(:title, :content)
    end

  def find_idea_by_id
    Idea.find(params[:id])
  end

end

次にdestoryアクション内の処理を追加していきます。

def destroy
  @idea = find_idea_by_id
  @idea.destroy
  redirect_to ideas_path
end

この記述でテーブルから該当の一行を削除することが可能です。最後に一覧画面へリダイレクトできるようにしてます。

ダイアログを表示させる

削除画面から登録データを削除する際に確認のダイアログを表示させてよりウェブサービスっぽさを出してみたいと思います。

<%= link_to "Delete", idea_path(@idea.id), method: :delete, data: {confirm: "Are you sure to delete the post?"} %>

確認のダイアログを表示するには{confirm: "Are you sure to delete the post?"}と書くだけでダイアログ用のjavascriptを出力できます。

まとめ

子でCRUDで必要な一通りの機能の実装ができました。正直今回のアプリは簡単なのでこれくらいで十分かなと思います。明日からはbootstrapの使い方に進んでいこうと思います。あと、余った時間で必要なアクションがないか再度確認をしていきます。