前提・実現したいこと
以下写真のような新規作成→確認画面→完了画面の実装がしたいです。
現在は新規作成~完了までの流れは実装済みです。
問題は登録完了後にブラウザバックをすると作成中に以下のようなエラーメッセージが出てしまいます。
試したこと
エラー分通りRouting部分をPOSTではなくGETに変えました。
すると、以下のように新規作成時にエラーがでるので、
RoutingのConfirmにGETとPOSTを記述しました。
すると登録完了までは無事にできますが、完了後に再度ブラウザバックをすると以下のようなエラーがでます。
ここから先どうを進めて良いのか分からずに困っています。
ちなみにブラウザはChromeでもSafariでも同じエラーが出ます。
該当のソースコード
ソースコードは以下です。
config/routes.rb
ruby
1Rails.application.routes.draw do 2 root to: 'registrations#index' 3 resources :registrations, only: [:index, :new, :create] do 4 collection do 5 get :confirm 6 post :confirm 7 get :finish 8 end 9 end 10end
app/models/registration.rb
ruby
1class Registration < ApplicationRecord 2 validates :name, presence: true 3end
app/controllers/registrations_controller.rb
ruby
1class RegistrationsController < ApplicationController 2 def index 3 @registrations = Registration.all 4 end 5 6 def new 7 @registration = Registration.new 8 end 9 10 def confirm 11 @registration = Registration.new(registration_params) 12 unless @registration.valid? 13 flash.now[:danger] = "正しく入力してください。" 14 render :new 15 end 16 end 17 18 def create 19 @registration = Registration.new(registration_params) 20 21 if params[:back].present? 22 render :new 23 return 24 end 25 26 if @registration.save 27 redirect_to action: :finish 28 else 29 flash.now[:danger] = "登録に失敗しました。" 30 render :new 31 end 32 end 33 34 def finish 35 end 36 37 private 38 def registration_params 39 params.require(:registration).permit(:name) 40 end 41end
app/views/registrations/new.html.erb
<%= form_with( model: @registration, local: true, url: {action: :confirm}) do |f| %> <h2>登録手続き</h2> <% if @registration.errors.any? %> <div id="error_explanation"> <%= @registration.errors.count %>件のエラーがあります。 <ul> <% @registration.errors.full_messages.each do |msg| %> <li><%= msg %></li> <% end %> </ul> </div> <% end %> <div class="field"> <%= f.label :name %> <%= f.text_field :name %> </div> <div class="actions"> <%= link_to '登録一覧へ', root_path %> <%= f.submit '確認する' %> </div> <% end %>
app/views/registrations/confirm.html.erb
<%= form_with( model: @registration, local: true, url: {action: :create}) do |f| %> <h2>登録確認</h2> <%= hidden_field_tag :finish, true %> <%= f.hidden_field :name %> <div class="field"> <%= f.label :name %> <%= @registration.name %> </div> <div class="actions"> <%= f.submit '登録作成へ戻る', name: 'back' %> <%= f.submit '完了する' %> </div> <% end %>
app/views/registrations/finish.html.erb
<h1>登録完了しました。</h1> <p><%= link_to '登録一覧へ戻る', root_path %></p>
また以下が私の実装しているGitHubのリンクです。
https://github.com/yyytuit/confirm
補足情報
DBはMysqlです。
Railsのバージョンは5.2.4です。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/09/07 02:15
2020/09/07 02:47 編集
2020/09/07 22:56
2020/09/08 00:06
2020/09/08 00:18
2020/09/08 00:49
2020/09/10 05:31 編集