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

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

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

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

ログイン

ログインは、ユーザーがコンピューターシステムにアクセスするプロセスの事を呼びます。

保存

保存(save)とは、特定のファイルを、ハードディスク等の外部記憶装置に記録する行為を指します。

Q&A

0回答

603閲覧

新規登録とログイン機能の実装について

shrine-dragon

総合スコア0

Ruby on Rails

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

ログイン

ログインは、ユーザーがコンピューターシステムにアクセスするプロセスの事を呼びます。

保存

保存(save)とは、特定のファイルを、ハードディスク等の外部記憶装置に記録する行為を指します。

0グッド

0クリップ

投稿2021/01/27 07:56

前提・実現したいこと

deviseを用いたユーザー管理機能の実装において、
新規登録とログインができるようにしたいです。

発生している問題・エラーメッセージ

新規登録・ログインページにおいて、
必要な値は入力できているのに、送信ボタンを押しても
そのページから静止したままでフォームがリセットされるだけです。
新規登録に至ってはデータベース(mysql)上に保存されません。

しかし、コンソール上から打ち込むと
保存できるので、不思議です。

エラーメッセージ

### 該当のソースコード ターミナル Started POST "/views" for ::1 at 2021-01-27 15:55:26 +0900 Processing by Devise::RegistrationsController#create as HTML Parameters: {"authenticity_token"=>"HbQsIs63cGEUpzK0jgf3P41wktGLlI+YCnEJjD3mwFanPRtsj5lic1UyFcSEj6bTDzn26e8qFagb1ywa5JGuIw==", "email"=>"test@softbank.co.jp", "encrypted_password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]", "name"=>"山田太郎", "profile"=>"各地を放浪するノマドワーカー", "occupation"=>"フリーランス", "position"=>"エンジニア", "commit"=>"新規登録"} Rendering devise/registrations/new.html.erb within layouts/application Rendered devise/registrations/new.html.erb within layouts/application (Duration: 5.0ms | Allocations: 6270) [Webpacker] Everything's up-to-date. Nothing to do Completed 200 OK in 30ms (Views: 23.5ms | ActiveRecord: 0.0ms | Allocations: 16491) ```Ruby on Rails ###ルーティング Rails.application.routes.draw do devise_for :views devise_for :users root to: "prototypes#index" end ###コントローラー class ApplicationController < ActionController::Base before_action :configure_permitted_parameters, if: :devise_controller? before_action :authenticate_user! private def configure_permitted_parameters devise_parameter_sanitizer.permit(:sign_up, keys: [:email, :password, :name, :profile, :occupation, :position]) devise_parameter_sanitizer.permit(:sign_in, keys: [:email, :password]) end end ###モデル class User < ApplicationRecord devise :database_authenticatable, :registerable, :recoverable, :rememberable, :validatable validates :name, presence: true validates :email, presence: true validates :occupation, presence: true validates :position, presence: true has_many :comments has_many :prototypes end ###マイグレーションファイル class DeviseCreateUsers < ActiveRecord::Migration[6.0] def change create_table :users do |t| t.string :email, null: false, default: "" t.string :encrypted_password, null: false, default: "" t.string :name, null: false t.text :profile, null: false t.text :occupation, null: false t.text :position, null: false t.string :reset_password_token t.datetime :reset_password_sent_at t.datetime :remember_created_at end add_index :users, :email, unique: true add_index :users, :reset_password_token, unique: true end end ###ビューファイル ######views/devise/registrations/new.html.erb <div class="main"> <div class="inner"> <div class="form__wrapper"> <h2 class="page-heading">ユーザー新規登録</h2> <%# 「モデル名」にはUserモデルであれば@userを渡しましょう。%> <%# 「新規登録機能へのパス」は、devise導入後にrails routesを実行してdevise/registrations#createへのパスを確認し、記載してください。 %> <%= form_with model: @user, url: view_registration_path, local: true do |f| %> <div class="field"> <%= f.label :email, "メールアドレス" %><br /> <%= f.email_field :email, autofocus: true, autocomplete: "email" %> </div> <div class="field"> <%= f.label :password, "パスワード(6文字以上)" %><br /> <%= f.password_field :encrypted_password, autocomplete: "new-password" %> </div> <div class="field"> <%= f.label :password_confirmation, "パスワード再入力" %><br /> <%= f.password_field :password_confirmation, autocomplete: "new-password" %> </div> <div class="field"> <%= f.label :name, "ユーザー名" %><br /> <%= f.text_field :name %> </div> <div class="field"> <%= f.label :profile, "プロフィール" %><br /> <%= f.text_area :profile, class: :form__text %> </div> <div class="field"> <%= f.label :occupation, "所属" %><br /> <%= f.text_area :occupation, class: :form__text %> </div> <div class="field"> <%= f.label :position, "役職" %><br /> <%= f.text_area :position, class: :form__text %> </div> <div class="actions"> <%= f.submit "新規登録", class: :form__btn, method: :post %> </div> <% end %> </div> </div> </div> ######views/devise/sessions/new.html.erb <div class="main"> <div class="inner"> <div class="form__wrapper"> <h2 class="page-heading">ユーザーログイン</h2> <%# 「モデル名」にはUserモデルであれば@userを渡しましょう。%> <%# 「ログイン機能へのパス」は、devise導入後にrails routesを実行してdevise/sessions#createへのパスを確認し、記載してください。 %> <%= form_with model: @user, url: view_session_path, local: true do |f| %> <div class="field"> <%= f.label :email, "メールアドレス" %><br /> <%= f.email_field :email, autofocus: true, autocomplete: "email" %> </div> <div class="field"> <%= f.label :password, "パスワード(6文字以上)" %><br /> <%= f.password_field :encrypted_password, autocomplete: "current-password" %> </div> <div class="actions"> <%= f.submit "ログイン", class: :form__btn %> </div> <% end %> </div> </div> </div>

試したこと

・ルーティング、バリデーション、ストロングパラメータ、パス、httpメソッド等を確認したが
特に問題はなかった。
・ターミナルのコンソール上で下記コード打ち込んで保存すると
データベースに反映される。
・上記の結果、バリデーション・ストロングパラメーターに完全に問題はない、
ということが分かっただけだった。
・application_cotroller.rb内にbinding.pryを記述して処理を止めてみたが、
分かったのはparamsに問題ない、ということだけだった。

補足情報(FW/ツールのバージョンなど)

(ターミナル上)
@user = User.new(email: "test@rakuten.co.jp", password: 333333, name: "山田太郎", profile:"各地を放浪するノマドワーカー", occupation: "フリーランス", position: "エンジニア")
=> #<User id: nil, email: "test@rakuten.co.jp", name: "山田太郎", profile: "各地を放浪するノマドワーカー", occupation: "フリーランス", position: "エンジニア", created_at: nil, updated_at: nil>
[4] pry(main)> @user.save
(0.4ms) BEGIN
User Exists? (0.5ms) SELECT 1 AS one FROM users WHERE users.email = BINARY 'test@rakuten.co.jp' LIMIT 1
User Create (0.5ms) INSERT INTO users (email, encrypted_password, name, profile, occupation, position, created_at, updated_at) VALUES ('test@rakuten.co.jp', '$2a$12$rC0dj4kkno991UPW/tCcE.2vkpGEOI04Eq1wbDZsO9eQZ1ZXMDPfa', '山田太郎', '各地を放浪するノマドワーカー', 'フリーランス', 'エンジニア', '2021-01-27 07:06:29.781818', '2021-01-27 07:06:29.781818')
(1.4ms) COMMIT
=> true

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

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

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

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

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

winterboum

2021/01/27 08:16

読みにくいので <code>をつかってください。 質問を編集して codeを ``` 3文字だけの行で囲むのでよいです
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問