@Bulkgi (bulkgi)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

raiils deviseで複数モデルを用いた際に新規登録のデータが保存できません。

前提・実現したいこと

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

No Answers yet.

Your answer might help someone💌