nna1016
@nna1016

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

【Rails】アカウント作成時、確認画面の表示

解決したいこと

Deviseでアカウントを作成する際に、確認画面をはさみたい

発生している問題・エラー

image.png

該当するソースコード

new.html.erb
<h2>Sign up</h2>
<%= form_with model: @user, url: users_sign_up_confirm_path(@user), local: true do |f| %>

 <div class="field">
    <%= f.label :"氏名" %><br />
    <%= f.text_field :username, autofocus: true, autocomplete: "username" %>
  </div>

 ・・・

  <div class="field">
    <%= f.label :password %>
    <% if @minimum_password_length %>
      (<%= @minimum_password_length %>文字以上)
  <% end %>
  </div>

  <div class="field">
    <%= f.password_field :password %>
    <%= f.password_field :password_confirmation %>
  </div>

  <div class="field">
    <%= f.label :"個人写真" %><br/>
    <%= f.file_field :userpic %>
  </div>

  <%= render "devise/shared/links" %>

  <div class="actions">
    <%= f.submit "確認" %>
  </div>
<% end %>
confirm.html.erb
<div>

  <h2>入力情報の確認</h2>

  <%= form_for(resource, as: resource_name, url: registration_path(resource_name)) do |f| %>

 <div class="field">
    <%= f.label :"氏名" %><br />
    <%= f.text_field :username, value: @user.username, readonly: true %>
  </div>

  <div class="field">
    <%= f.label :"フリガナ" %><br />
    <%= f.text_field :ruby, value: @user.ruby, readonly: true %>
  </div>

 ・・・

  <div class="field">
    <%= f.label :"入学年" %><br />
    <%= f.text_field :entry_year, value: @user.entry_year, readonly: true %>
  </div>

  <div class="field">
    <%= f.label :"個人写真" %><br/>
    <img src=<%= @user.userpic %> class = "icon_image">
  </div>

    <%= f.submit "修正する", name: :back %>
    <%= f.submit "登録する" %>

  <% end %>
</div>
registrations_controller.rb
# frozen_string_literal: true

class Users::RegistrationsController < Devise::RegistrationsController
  # before_action :configure_sign_up_params, only: [:create]
  # before_action :configure_account_update_params, only: [:update]

  # GET /resource/sign_up
  # def new
  #   super
  # end

  #POST /resource
  def create
    @user = User.new(sign_up_params)
    render :new and return if params[:back]
    super
  end

 ・・・

  def update
    @user = User.find(params[:id])
    if @user.valid?
      @user.update(update_params)
      redirect_to user_path(@user.id)
    else
      render :edit
    end
  end

    # 新規追加
  def confirm
  end

  # 新規追加
  def complete
  end

  # アカウント登録後
  def after_sign_up_path_for(resource)
    users_sign_up_complete_path(resource)
  end

  private
  def update_params
    params.require(:user).permit(:username)
  end

end
routes.rb
Rails.application.routes.draw do

  root 'home#top'
  get '/' => 'home#top'

  devise_for :users, controllers: {
    registrations: 'users/registrations'
  }

  # views/users/registrations内に作成したconfirm.html.erbとcomplete.html.erbもルーティングに追加します。
  devise_scope :user do
    post 'users/sign_up/confirm', to: 'users/registrations#confirm'
    get 'users/sign_up/complete', to: 'users/registrations#complete'
  end

 ・・・

end

参考にした記事

私自身、Rails初学者であり、deviseの仕組みを深く理解しているわけではないため、今回のようなdeviseを用いた確認画面を作成する場合、どうして良いのか行き詰まっている状況です。
どなたか、ご教授いただけますと幸いです。

0

1Answer

Your answer might help someone💌