takumiのエンジニア技術ブログ

takumiのエンジニア技術ブログ

未経験からエンジニアを目指しています!技術定着の為にこのブログにアウトプットしていきます!気軽にコメント等いただけるとありがたいです!

タスク管理アプリで新規登録前の確認画面を作る

 

f:id:golikyua:20190921204525j:plain

 

こんにちは!今日はタスク管理アプリの新規登録前の確認画面を実装したので、その方法をアウトプットします!

 

目標

 

「新規登録前に確認画面を作る」

 

やること

・確認画面のアクションを作成

・ルーティングの設定

・確認画面のビューファイル作成

・新規登録画面からconfirm_newアクションへ遷移するようにする

・新規登録画面の戻るボタンからの遷移に対応する

 

 

本題

 

・アクションの作成!

def confirm_new
    @task = current_user.tasks.new(task_params)
    render :new unless @task.valid?
  end

アクション名は「confirm_new」とする。

このアクションでは、

新規登録フォームに入力された値からオブジェクを作成し、@taskに代入する。

新規登録画面に入力された値に検証をかけ、引っかかったら新規登録画面へ戻り、問題なければ確認画面へ。

 

・ルーティングの設定!

Rails.application.routes.draw do
  ...


  resources :tasks do
    post :confirm, action: :confirm_new, on: :new
  end
end

確認画面のアクションは、よくあるRUCDのアクションではないため、resources :taskでは定義されいためこのような書き方をする。

Prefixは「confirm_new_task」Verbは「Post」URLパターンは「/tasks/new/confirm」

 

・confirm_newのビューファイルを作成!

h1 登録内容の確認

= form_with model: @task, local: true do |f|
  table.table.table-hover
    tbody
      tr
        th= Task.human_attribute_name(:name)
        td= @task.name
        = f.hidden_field :name
      tr
        th= Task.human_attribute_name(:description)
        td= simple_format(@task.description)
        = f.hidden_field :description
  = f.submit '戻る', name: 'back', class: 'btn btn-primary mr-3'
  = f.submit '登録', class: 'btn btn-primary'

 

・新規登録画面からconfirm_newアクションへ遷移するようにする!

h1 タスクの新規登録

.nav.justify-content-end
  = link_to '一覧', tasks_path, class: 'nav-link'

- if @task.errors.present?
  ul#error_explanation
    - @task.errors.full_messages.each do |message|
      li= message

= form_with model: @task, local: true, url: confirm_new_task_path do |f|
  .form-group
    = f.label :name
    = f.text_field :name, class: 'form-control', id: 'task_name'
  .form-group
    = f.label :description
    = f.text_area :description, row: 5, class: 'form-control', id: 'task_description'
  = f.submit '確認', class: 'btn btn-primary

form_withのurlオプションを「confim_new_task_path」にする!

 

・新規登録画面の戻るボタンからの遷移に対応する!

def create
    @task = current_user.tasks.new(task_params)

    if params[:back].present?
      render :new
      return
    end

    if @task.save
      redirect_to @task, notice: "タスク「#{@task.name}」を登録しました。"
    else
      render :new
    end
  end

confirm_new.html.slim では、戻るボタンに '戻る' という名前を与えている為、 

params[:back]で、'戻る' という文字列を得られる。

'戻る'が存在すれば、新規登録画面へ。

これで、確認画面の実装は完了!

 

まとめ

 

アクション作成

ルーティングの設定

新規登録画面から確認画面への遷移を設定

確認画面の戻るボタンを押された時の遷移の設定