deviseでの新規登録がデータベースに反映されない
解決したいこと
現在、フリマアプリのWebアプリの作成をしております。
deviseで新規登録をしたところ、データベースに情報が反映されない。
原因を探ってみたが、エラーが解決されなかった。
発生している問題・エラー
(0.1ms) BEGIN
User Exists? (0.2ms) SELECT 1 AS one FROM `users` WHERE `users`.`email` = BINARY 'yuu@gmail.com' LIMIT 1
(0.1ms) ROLLBACK
Rendering devise/registrations/new.html.erb within layouts/application
Rendered shared/_second-header.html.erb (Duration: 1.7ms | Allocations: 797)
Rendered shared/_second-footer.html.erb (Duration: 0.6ms | Allocations: 427)
Rendered devise/registrations/new.html.erb within layouts/application (Duration: 5.6ms | Allocations: 4978)
[Webpacker] Everything's up-to-date. Nothing to do
Completed 200 OK in 37ms (Views: 28.1ms | ActiveRecord: 0.4ms | Allocations: 31979)
該当するソースコード
controller
class ApplicationController < ActionController::Base
before_action :configure_permitted_parameters, if: :devise_controller?
private
def configure_permitted_parameters
devise_parameter_sanitizer.permit(:sign_up, keys: [:nickname, :first_name, :last_name, :first_name_kana, :last_name_kana, :birthday, :encrypted_password])
end
end
model
class User < ApplicationRecord
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable, :trackable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :validatable
validates :nickname, presence: true
validates :first_name, presence: true
validates :last_name, presence: true
validates :first_name_kana, presence: true
validates :last_name_kana, presence: true
validates :birthday, presence: true
end
view
<%= render "shared/second-header"%>
<%# 「モデル名」にはUserモデルであれば@userを渡しましょう。「新規登録機能へのパス」は、devise導入後にrails routesを実行してdevise/registrations#createへのパスを確認し、記載してください。 %>
<%= form_with model: @user, url: new_user_registration_path, class: 'registration-main', local: true do |f| %>
<%# //「モデル名」にはUserモデルであれば@userを渡しましょう。「新規登録機能へのパス」は、devise導入後にrails routesを実行してdevise/registrations#createへのパスを確認し、記載してください。 %>
<div class='form-wrap'>
<div class='form-header'>
<h1 class='form-header-text'>
会員情報入力
</h1>
</div>
<%# インスタンスを渡して、エラー発生時にメッセージが表示されるようにしましょう。%>
<%# render 'shared/error_messages', model: f.object %>
<%# //インスタンスを渡して、エラー発生時にメッセージが表示されるようにしましょう。%>
<div class="form-group">
<div class='form-text-wrap'>
<label class="form-text">ニックネーム</label>
<span class="indispensable">必須</span>
</div>
<%= f.text_area :nickname, class:"input-default", id:"nickname", placeholder:"例) furima太郎", maxlength:"40" %>
</div>
<div class="form-group">
<div class='form-text-wrap'>
<label class="form-text">メールアドレス</label>
<span class="indispensable">必須</span>
</div>
<%= f.email_field :email, class:"input-default", id:"email", placeholder:"PC・携帯どちらでも可", autofocus: true %>
</div>
<div class="form-group">
<div class='form-text-wrap'>
<label class="form-text">パスワード</label>
<span class="indispensable">必須</span>
</div>
<%= f.password_field :encrypted_password, class:"input-default", id:"password", placeholder:"6文字以上の半角英数字" %>
<p class='info-text'>※英字と数字の両方を含めて設定してください</p>
</div>
<div class="form-group">
<div class='form-text-wrap'>
<label class="form-text">パスワード(確認)</label>
<span class="indispensable">必須</span>
</div>
<%= f.password_field :password_confirmation, class:"input-default", id:"password-confirmation", placeholder:"同じパスワードを入力して下さい" %>
</div>
<div class="form-group">
<p class='form-info-header'>
本人確認
</p>
<p class='form-info-text'>
安心・安全にご利用いただくために、お客さまの本人情報の登録にご協力ください。他のお客さまに公開されることはありません。
</p>
</div>
<div class="form-group">
<div class='form-text-wrap'>
<label class="form-text">お名前(全角)</label>
<span class="indispensable">必須</span>
</div>
<div class='input-name-wrap'>
<%= f.text_area :last_name, class:"input-name", id:"last-name", placeholder:"例) 山田" %>
<%= f.text_area :first_name, class:"input-name", id:"first-name", placeholder:"例) 陸太郎" %>
</div>
</div>
<div class="form-group">
<div class='form-text-wrap'>
<label class="form-text">お名前カナ(全角)</label>
<span class="indispensable">必須</span>
</div>
<div class='input-name-wrap'>
<%= f.text_area :last_name_kana, class:"input-name", id:"last-name-kana", placeholder:"例) ヤマダ" %>
<%= f.text_area :first_name_kana, class:"input-name", id:"first-name-kana", placeholder:"例) リクタロウ" %>
</div>
</div>
<div class="form-group">
<div class='form-text-wrap'>
<label class="form-text">生年月日</label>
<span class="indispensable">必須</span>
</div>
<div class='input-birth-wrap'>
<%= raw sprintf(
f.date_select(
:birthday,
class:'select-birth',
id:"birth-date",
use_month_numbers: true,
prompt:'--',
start_year: 1930,
end_year: (Time.now.year - 5),
date_separator: '%s'),
"<p> 年 </p>", "<p> 月 </p>") + "<p> 日 </p>" %>
</div>
<p class='info-text'>※ 本人情報は正しく入力してください。会員登録後、修正するにはお時間を頂く場合があります。</p>
</div>
<div class="form-group">
<h2 class='form-bottom-text'>
「会員登録」のボタンを押すことにより、
<span>利用規約</span>
<br>に同意したものとみなします
</h2>
</div>
<div class='register-btn'>
<%= f.submit "会員登録" ,class:"register-red-btn" %>
</div>
<p class='register-info'>本人情報の登録について</p>
</div>
<% end %>
<%= render "shared/second-footer"%>
config
Rails.application.routes.draw do
devise_for :users
# For details on the DSL available within this file, see https://guides.rubyonrails.org/routing.html
root to: 'items#index'
end
migrate
# frozen_string_literal: true
class DeviseCreateUsers < ActiveRecord::Migration[6.0]
def change
create_table :users do |t|
## Database authenticatable
t.string :email, null: false, unique: true, default: ""
t.string :encrypted_password, null: false, default: ""
t.string :nickname, null: false
t.string :first_name, null: false
t.string :last_name, null: false
t.string :first_name_kana, null: false
t.string :last_name_kana, null: false
t.date :birthday, null: false
## Recoverable
t.string :reset_password_token
t.datetime :reset_password_sent_at
## Rememberable
t.datetime :remember_created_at
## Trackable
# t.integer :sign_in_count, default: 0, null: false
# t.datetime :current_sign_in_at
# t.datetime :last_sign_in_at
# t.string :current_sign_in_ip
# t.string :last_sign_in_ip
## Confirmable
# t.string :confirmation_token
# t.datetime :confirmed_at
# t.datetime :confirmation_sent_at
# t.string :unconfirmed_email # Only if using reconfirmable
## Lockable
# t.integer :failed_attempts, default: 0, null: false # Only if lock strategy is :failed_attempts
# t.string :unlock_token # Only if unlock strategy is :email or :both
# t.datetime :locked_at
t.timestamps null: false
end
add_index :users, :email, unique: true
add_index :users, :reset_password_token, unique: true
# add_index :users, :confirmation_token, unique: true
# add_index :users, :unlock_token, unique: true
end
end
自分で試したこと
・データベースの確認をしたところ、usersテーブルには正常にカラムが作成されていたので、ここでエラーは起こらないと思った。
・ストロングパラメーターで許可した値は、ターミナル上に出力されているので、user自体の情報が保存されていない可能性があると思い、コントローラーやモデルの確認をしてみたが、データベースに情報が送られない原因が分からなかった。
=なぜ、新規登録をするときに正常にユーザー情報がデータベースに保存されないのか原因が掴めないので、どこにエラーが起きる原因があるのかご指摘頂けたら幸いです。
0