raiils deviseで複数モデルを用いた際に新規登録のデータが保存できません。
Q&A
Closed
前提・実現したいこと
railsでdeviseを複数モデルを用いた新規登録機能を実装しようと思っています。
開発環境で実際に新規登録を行おうとした際に
User Exists? (1.1ms) SELECT 1 AS one FROM users WHERE users.email = BINARY 'agrib@gmail.com' LIMIT 1
というエラーが発生しました。
調べていくうちに、emailの一意性のエラーではないかというところまで辿り着き、データベースをリセットしましたが、また同じエラーが発生しました。。
データベースを空にしたのに、もう同じemailが入っていますというのは、どういうことか全くわからず途方に暮れております。。
どなたかご教授いただけると幸いです。
下記にエラーの全体のメッセージとルーティング、controller、modelのコードを載せておきます。
発生している問題・エラーメッセージ
Processing by Users::RegistrationsController#create as HTML
Parameters: {"authenticity_token"=>"Y7ztyr+HA32c4qYjzrQgXZ6El8UbXOcCPKbo3OuVEfVtBxFqYAaSmhg620vHEM7a+Xm2+zrtUcJDdsTw3f2u7w==", "user"=>{"nickname"=>"agrib", "email"=>"agrib@gmail.com", "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]", "last_name"=>"山田", "first_name"=>"陸太郎", "last_name_ruby"=>"ヤマダ", "first_name_ruby"=>"リクタロウ", "birth_day(1i)"=>"1952", "birth_day(2i)"=>"8", "birth_day(3i)"=>"23"}, "commit"=>"会員登録"}
(0.4ms) BEGIN
User Exists? (1.1ms) SELECT 1 AS one FROM `users` WHERE `users`.`email` = BINARY 'agrib@gmail.com' LIMIT 1
(0.2ms) ROLLBACK
試したこと
調べた結果、このエラーはemailの一意性が原因で起こるエラーということがわかりました。
そこで、rails db:migrate:resetを行い、再度新規登録を行いましたが、
Started POST "/users" for ::1 at 2021-03-16 18:16:31 +0900
(0.4ms) SET NAMES utf8, @@SESSION.sql_mode = CONCAT(CONCAT(@@sql_mode, ',STRICT_ALL_TABLES'), ',NO_AUTO_VALUE_ON_ZERO'), @@SESSION.sql_auto_is_null = 0, @@SESSION.wait_timeout = 2147483
(0.2ms) SELECT `schema_migrations`.`version` FROM `schema_migrations` ORDER BY `schema_migrations`.`version` ASC
Processing by Users::RegistrationsController#create as HTML
Parameters: {"authenticity_token"=>"Y7ztyr+HA32c4qYjzrQgXZ6El8UbXOcCPKbo3OuVEfVtBxFqYAaSmhg620vHEM7a+Xm2+zrtUcJDdsTw3f2u7w==", "user"=>{"nickname"=>"agrib", "email"=>"agrib@gmail.com", "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]", "last_name"=>"山田", "first_name"=>"陸太郎", "last_name_ruby"=>"ヤマダ", "first_name_ruby"=>"リクタロウ", "birth_day(1i)"=>"1952", "birth_day(2i)"=>"8", "birth_day(3i)"=>"23"}, "commit"=>"会員登録"}
(0.4ms) BEGIN
User Exists? (1.1ms) SELECT 1 AS one FROM `users` WHERE `users`.`email` = BINARY 'agrib@gmail.com' LIMIT 1
(0.2ms) ROLLBACK
というエラーが発生し、解決には至りませんでした。
ルーティング
Rails.application.routes.draw do
devise_for :users, controllers: {
sessions: 'users/sessions',
registrations: 'users/registrations'
}
devise_for :farmer_users, controllers: {
sessions: 'farmer_users/sessions',
registrations: 'farmer_users/registrations'
}
root to: 'products#index'
resources :products, only: :index
end
コントローラー
app/controllers/users/registrations_controller.rb
class Users::RegistrationsController < Devise::RegistrationsController
before_action :configure_sign_up_params, only: [:create]
.
.
.
def configure_sign_up_params
devise_parameter_sanitizer.permit(:sign_up, keys: [:nickname, :first_name, :last_name, :first_name_ruby, :last_name_ruby, :birth_day])
end
モデル
class User < ApplicationRecord
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable, :trackable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :validatable
validates :password, format:{ with: /\A(?=.*?[a-z])(?=.*?[\d])[a-z\d]+\z/i, message: 'パスワードは6文字以上の半角英数字にしてください'}
with_options presence: true, format:{ with: /\A[ぁ-んァ-ヶ一-龥々]+\z/, message: '全角文字を使用してください' } do
validates :first_name
validates :last_name
end
with_options presence: true, format:{ with: /\A[ァ-ヶ一-]+\z/, message: '全角カナ文字を使用してください' } do
validates :first_name_ruby
validates :last_name_ruby
end
with_options presence: true do
validates :nickname
validates :birth_day
end
end
補足情報(FW/ツールのバージョンなど)
Sql Pro 1.1.2
ruby 6.0.0
vscode 1.5.4
0 likes