前提・実現したいこと
新規登録機能を実装中にトップページから新規登録のボタンを押すと
新規登録作成画面に遷移せずエラーメッセージが発生してしまい解消できません。
localhost:3000/user/sign_upに遷移できることが目標です。
発生している問題・エラーメッセージ
Routing Error No route matches [GET] "/users"
該当のソースコード
【routes.rb】 Rails.application.routes.draw do devise_for :users root to: "prototypes#index" resources :prototypes, only: [:index, :show, :new, :create, :destroy, :edit, :update,] do resources :comments, only: :create end end
【new.html.erb】 <div class="main"> <div class="inner"> <div class="form__wrapper"> <h2 class="page-heading">ユーザー新規登録</h2> <%= form_with model: @user, url: new_user_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_confirmation, "パスワード(6文字以上)" %><br /> <%= f.password_field :password_confirmation, 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 :user_name, "ユーザー名" %><br /> <%= f.text_field :user_name, autofocus: true %> </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 %> </div> <% end %> </div> </div> </div>
【user.controller.rb】 class UsersController < ApplicationController def create @user = User.new(params.require(:user).permit(:email, :password, :user_name, :email, :profile, :occupation, :position)) @user.save redirect_to users_path end def new @user = User.new end def show end end
【prototype_controller.rb】 class PrototypesController < ApplicationController before_action :set_prototype, only: [:show, :edit, :update, :destroy] before_action :move_to_index, except: [:index] def index @users = User.all end def new @prototype = Prototype.new end def create @prototype =prototypes.new(prototype_params) if @prototype.save redirect_to root_path, notice: '完了しました' else redirect_to new_prototype_path, alert: '完了していません' end end private def move_to_index unless user_signed_in? redirect_to action: :index end end end
routes
1new_user_session_path GET /users/sign_in(.:format) 2devise/sessions#new 3 4user_session_path POST /users/sign_in(.:format) 5devise/sessions#create 6 7destroy_user_session_path GET /users/sign_out(.:format) 8devise/sessions#destroy 9 10new_user_password_path GET /users/password/new(.:format) 11devise/passwords#new 12 13edit_user_password_path GET /users/password/edit(.:format) 14devise/passwords#edit 15 16user_password_path PATCH /users/password(.:format) 17devise/passwords#update 18 19PUT /users/password(.:format) 20devise/passwords#update 21 22POST /users/password(.:format) 23devise/passwords#create 24 25cancel_user_registration_path GET /users/cancel(.:format) 26devise/registrations#cancel 27 28new_user_registration_path GET /users/sign_up(.:format) 29devise/registrations#new 30 31edit_user_registration_path GET /users/edit(.:format) 32devise/registrations#edit 33 34user_registration_path PATCH /users(.:format) 35devise/registrations#update 36 37PUT /users(.:format) 38devise/registrations#update 39 40DELETE /users(.:format) 41devise/registrations#destroy 42 43POST /users(.:format) 44devise/registrations#create 45 46root_path GET / 47prototypes#index
【application.html.erb】 <!DOCTYPE html> <html> <head> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>ProtoSpace</title> <%= csrf_meta_tags %> <%= csp_meta_tag %> <%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %> <%= javascript_pack_tag 'application', 'data-turbolinks-track': 'reload' %> <link href="https://fonts.googleapis.com/css?family=Noto+Sans+JP:400,700,900&display=swap" rel="stylesheet"> </head> <body> <header class="header"> <div class="inner"> <div class="nav"> <div class="nav__left"> <%= link_to image_tag("logo.png", class: :logo), root_path %> </div> <div class="nav__right"> <% if user_signed_in? %> <%= link_to "ログアウト", destroy_user_session_path, method: :delete, class: :nav__logout %> <%= link_to "New Proto", new_user_session_path, class: :nav__btn %> <% else %> <%= link_to "ログイン", user_session_path, class: :nav__btn %> <%= link_to "新規登録", user_registration_path, class: :nav__btn %> <% end %> </div> </div> </div> </header> <%= yield %> <footer class="footer"> <p class="copyright">Copyright © PROTO SPACE All rights reserved.</p> </footer> </body> </html>
試したこと
ネットにて同じような事案を調査して試してみましたが解決できませんでした。
routes.rbの記述が不足している?
初心者の為、整理できていません。アドバイス頂けると助かります。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
タグが本件と関係ないものがつけられています。
返答ありがとうございます。
申し訳ございません。具体的にどこの部分でしょうか?
初心者すぎて申し訳ございません。
質問要件ではなく、質問につけられたタグの話です。
コードレビューはともかくteratailは関係ないです。
Ruby on Railsは必須ですね。
「質問するときのヒント」など確認し、適切なタグの付け方を検討してください。
質問は編集できますので、編集してください。
大変失礼しました!
丁寧に教えて頂きありがとうございます!
あと、一応確認です。
Railsチュートリアルは通しましたか?
まだやっておりません。プログラミングスクールのカリキュラムのみです。
新規登録作成画面に遷移 させるための 新規登録のボタン のあるviewを載せてください
こちらでよろしいでしょうか?
こちら ってどちら?
app>views>devise>registrations>new.html.erb内にある
<div class="actions"><%= f.submit "新規登録", class: :form__btn %>こちらでしょうか?
それは、データを入力して登録するときの、でしょう。
「新規登録作成画面に遷移せず」だからその画面がでない。
その画面をだすボタンはどのview?
何度も失礼しました。
app>views>layouts>application.html.erb内にある
<%= link_to "新規登録", user_registration_path, class: :nav__btn %>
こちらでよろしいでしょうか?
回答1件
あなたの回答
tips
プレビュー