質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Devise

Deviseとは、Ruby-on-Railsの認証機能を追加するプラグインです。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

解決済

1回答

2381閲覧

新規会員登録画面について(Devise)

07_wq

総合スコア1

Devise

Deviseとは、Ruby-on-Railsの認証機能を追加するプラグインです。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

0クリップ

投稿2020/08/24 15:32

前提・実現したいこと

Ruby on Railsでフリマアプリを作っています。
ユーザー登録機能を実装中に以下の問題が発生しました。

発生している問題

・データがDBに登録されない
・次へボタンを押しても同じページに戻ってしまう
・次へボタンを押したら住所登録ページに遷移したい

エラー画面は出ないので、他に必要な作業があれば教えていただきたいです。

該当のソースコード

ruby

1#app/view/registrations/new.html.haml 2 3.userContainer 4 %header.userContainer__userHeader 5 .userHeader 6 .userHeader__logo 7 = link_to '#' do 8 = image_tag 'material/logo.png' 9 .userHeader__progressBar 10 %ol 11 %li.progressBar 12 %p.progressBar__cap#p_active 会員情報 13 .progressBar__status#status_active 14 .progressBar__bar 15 %li.progressBar 16 %p.progressBar__cap お届け先住所 17 .progressBar__status 18 .progressBar__bar 19 %li.progressBar 20 %p.progressBar__cap 完了 21 .progressBar__status 22 .userContainer__userMain 23 %h2.userContainer__userMain__title 会員情報入力 24 .userMain 25 = form_for(@user, url: user_registration_path) do |f| 26 .userMain__formGroup 27 = f.label :nickname, class: 'userMain__formGroup__label' 28 %span.userMain__formGroup__require 29 必須 30 %br/ 31 = f.text_field :name, class: 'userMain__formGroup--input', autofocus: true, placeholder: "例)Y.T" 32 %p.userMain__formGroup__errorMsg 33 =@user.errors.messages[:nickname][0] 34 .userMain__formGroup 35 = f.label :email, class: 'userMain__formGroup__label' 36 %span.userMain__formGroup__require 37 必須 38 %br/ 39 = f.email_field :email, class: 'userMain__formGroup--input', autofocus: true, autocomplete: "email", placeholder: "PC・携帯どちらでも可" 40 %p.userMain__formGroup__errorMsg 41 =@user.errors.messages[:email][0] 42 .userMain__formGroup 43 = f.label :password, class: 'userMain__formGroup__label' 44 %span.userMain__formGroup__require 45 必須 46 %br/ 47 = f.password_field :password, class: 'userMain__formGroup--input', autocomplete: "new-password", placeholder: "7文字以上の半角英数字" 48 %p.userMain__formGroup__errorMsg 49 =@user.errors.messages[:password][0] 50 .userMain__formGroup 51 = f.label :password_confirmation, class: 'userMain__formGroup__label' 52 %span.userMain__formGroup__require 53 必須 54 %br/ 55 = f.password_field :password_confirmation, class: 'userMain__formGroup--input', autocomplete: "new-password", placeholder: "7文字以上の半角英数字" 56 %p.userMain__formGroup__errorMsg 57 =@user.errors.messages[:password_confirmation][0] 58 .userMain__formGroup 59 = f.label :family_name, class: 'userMain__formGroup__label' 60 %span.userMain__formGroup__require 61 必須 62 %br/ 63 .userMain__formGroup__double 64 = f.text_field :family_name, class: 'userMain__formGroup--input double', autofocus: true, placeholder: "例)山田" 65 = f.text_field :first_name, class: 'userMain__formGroup--input double', autofocus: true, placeholder: "例)太郎" 66 %p.userMain__formGroup__errorMsg.double 67 =@user.errors.messages[:family_name][0] 68 %p.userMain__formGroup__errorMsg 69 =@user.errors.messages[:first_name][0] 70 .userMain__formGroup 71 = f.label :family_name_kana, class: 'userMain__formGroup__label' 72 %span.userMain__formGroup__require 73 必須 74 %br/ 75 .userMain__formGroup__double 76 = f.text_field :family_name_kana, class: 'userMain__formGroup--input double', autofocus: true, placeholder: "例)ヤマダ" 77 = f.text_field :first_name_kana, class: 'userMain__formGroup--input double', autofocus: true, placeholder: "例)タロウ" 78 %p.userMain__formGroup__errorMsg.double 79 =@user.errors.messages[:family_name_kana][0] 80 %p.userMain__formGroup__errorMsg 81 =@user.errors.messages[:first_name_kana][0] 82 .userMain__formGroup 83 = f.label :birthday, class: 'userMain__formGroup__label' 84 %span.userMain__formGroup__require 85 必須 86 %br/ 87 .userMain__formGroup__triple 88 = f.date_select :birthday, {use_month_numbers: true, start_year: 1930, end_year: (Time.now.year - 10), prompt:"--"}, {class: 'userMain__formGroup--input triple select'} 89 %p.userMain__formGroup__errorMsg 90 =@user.errors.messages[:birthday][0] 91 .userMain__formGroup 92 = f.label :ユーザータイプ, class: 'userMain__formGroup__label' 93 %span.userMain__formGroup__require 94 必須 95 %br/ 96 .userMain__formGroup__triple 97 = f.collection_select :user_type, UserType.all, :id, :value, { prompt: "選択してください" },{class: 'userMain__formGroup--input triple select'} 98 %p.userMain__formGroup__errorMsg 99 =@user.errors.messages[:user_type][0] 100 .userMain__actions 101 = f.submit "次へ進む", class: 'userMain__actions--Btn'

ruby

1#registrations_controller.rb 2 3# frozen_string_literal: true 4 5class Users::RegistrationsController < Devise::RegistrationsController 6 # before_action :configure_sign_up_params, only: [:create] 7 # before_action :configure_account_update_params, only: [:update] 8 9 def new 10 @user = User.new 11 end 12 13 def create 14 @user = User.new(sign_up_params) 15 16 # 1ページ目で入力した情報のバリデーションチェック 17 unless @user.valid? 18 render :new and return 19 end 20 21 # 1ページで入力した情報をsessionに保持させる 22 session["devise.regist_data"] = {user: @user.attributes} 23 session["devise.regist_data"][:user]["password"] = params[:user][:password] 24 25 @sendingDestination = @user.build_sending_destination 26 render :newSendingDestination 27 end 28 29 def createSendingDestination 30 @user = User.new(session["devise.regist_data"]["user"]) 31 32 # 2ページ目で入力した住所情報のバリデーションチェック 33 @sendingDestination = SendingDestination.new(sendingDestinationParams) 34 unless @sendingDestination.valid? 35 render :newSendingDestination and return 36 end 37 38 # バリデーションチェックが完了した情報と、sessionで保持していた情報とあわせ、ユーザー情報として保存する 39 @user.build_sending_destination(@sendingDestination.attributes) 40 @user.save 41 42 # sessionを削除する 43 session["devise.regist_data"]["user"].clear 44 # ログインする 45 sign_in(:user, @user) 46 end 47 48 protected 49 50 def sendingDestinationParams 51 params.require(:sending_destination).permit(:destination_first_name, :destination_family_name, :destination_first_name_kana, :destination_family_name_kana, :post_code, :prefecture_code, :city, :house_number, :building_name, :phone_number) 52 end 53end

ruby

1#user.rb 2 3class User < ApplicationRecord 4 # Include default devise modules. Others available are: 5 # :confirmable, :lockable, :timeoutable, :trackable and :omniauthable 6 devise :database_authenticatable, :registerable, 7 :recoverable, :rememberable, :validatable 8 has_one :sending_destination, dependent: :destroy 9 has_one :credit_card, dependent: :destroy 10 has_many :comments 11 belongs_to :user_type 12 13 # belongs_to :item 14 15 validates :nickname, 16 :email, 17 :birthday, presence: true 18 devise :validatable, password_length: 7..128 19 validates :family_name, presence: true, presence: {message: '姓を入力してください'} 20 validates :first_name, presence: true, presence: {message: '名を入力してください'} 21 validates :family_name_kana, presence: true, presence: {message: '姓カナを入力してください'} 22 validates :first_name_kana, presence: true, presence: {message: '名カナを入力してください'} 23 validates :user_type, presence: true 24 validates :email, uniqueness: true 25 validates :first_name, 26 :family_name, 27 :first_name_kana, 28 :family_name_kana, 29 format: { 30 with: /[^ -~。-゚]+/, 31 message: '全角で入力してください' 32 } 33 34end

試したこと

1、deviseとdevise-i18n、devise-i18n-viewsをインストール
2、user.rbとnew.html.hamlとregistrations_controller.rbに上記を記述
3、新規会員登録画面で全ての項目に入力して「次へ」ボタンを押しても次のページに遷移しない
https://i.gyazo.com/149da83bbd4bd58be95fe4a866579523.gif

補足情報(FW/ツールのバージョンなど)こにより詳細な情報を記載してください。

 gem 'rails', '~> 5.2.3'
gem 'haml-rails'
gem "font-awesome-sass"
gem 'devise'
gem 'active_hash'
gem 'devise-i18n'
gem 'devise-i18n-views'

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

... def create @user = User.new(sign_up_params) # 1ページ目で入力した情報のバリデーションチェック unless @user.valid? render :new and return end ...

とありますのでvalidationの結果がinvalidであり
#newに対応するビューがrenderされているのではないでしょうか

投稿2020/08/24 15:42

編集2020/08/24 15:42
naokit-dev

総合スコア424

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

07_wq

2020/08/24 16:11

早速ご回答いただき誠にありがとうございます!つまり、バリデーションが効いていないため、newのビューがrenderされているということでしょうか、、? コントローラーとバリデーションの記述をも一度見直してみます!ありがとうございます^^
naokit-dev

2020/08/24 17:22

> バリデーションが効いていないため 正確にはバリデーションの結果、invalidであったためと言えるかと思います ビューで入力したデータがvalidとなりうるものか コンソールで再現してみたり、デバッグツールを用いて検証してみるのが良いかと思います
07_wq

2020/08/25 14:44

先日はさらにご回答いただき誠にありがとうございました!ご指摘いただいた通り、バリデーションがinvalid出会ったためにnewのページに戻っておりました。。 ビューのデータがvalidとなりうる、deviseのdefaultではない追加したカラム(user_type )を、アプリケーションコントローラーのconfigure_permitted_parametersに追加していないことが原因でした。ご教示いただき大変助かりました!ありがとうございました^^
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問