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

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

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

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

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

Q&A

0回答

1051閲覧

ログインフォームについて

tetsuya7724

総合スコア67

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

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

0グッド

0クリップ

投稿2020/04/20 05:28

前提・実現したいこと

ログインフォームに飛びたいがエラーが発生する

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

Routing Error No route matches [GET] "/users/login"

イメージ説明

該当のソースコード

Ruby

1#controller 2 3class UsersController < ApplicationController 4 before_action :authenticate_user, {only: [:index, :show, :edit, :update]} 5 before_action :forbid_login_user, {only: [:new, :create]} 6 before_action :ensure_correct_user, {only: [:edit, :update]} 7 8 9 def index 10 @users = User.all 11 end 12 13 def show 14 @user = User.find_by(id: params[:id]) 15 end 16 17 def new 18 @user = User.new 19 end 20 21 def create 22 @user = User.new( 23 name: params[:name], 24 email: params[:email], 25 image_name: "default_user.jpg", 26 password: params[:password] 27 ) 28 if @user.save 29 session[:user_id] = @user.id 30 flash[:notice] = "ユーザー登録が完了しました" 31 redirect_to("/users/#{@user.id}") 32 else 33 render("users/new") 34 end 35 end 36 37 def edit 38 @user = User.find_by(id: params[:id]) 39 end 40 41 def update 42 @user = User.find_by(id: params[:id]) 43 @user.name = params[:name] 44 @user.email = params[:email] 45 46 if params[:image] 47 @user.image_name = "#{@user.id}.jpg" 48 image = params[:image] 49 File.binwrite("public/user_images/#{@user.image_name}", image.read) 50 end 51 52 if @user.save 53 flash[:notice] = "ユーザー情報を編集しました" 54 redirect_to("/users/#{@user.id}") 55 else 56 render("users/edit") 57 end 58 end 59 60def login_form 61end 62 63 def login 64 65 @user = User.find_by(email: params[:email]) 66 67 if @user && @user.authenticate(params[:password]) 68 session[:user_id] = @user.id 69 flash[:notice] = "ログインしました" 70 redirect_to("/posts/index") 71 else 72 @error_message = "メールアドレスまたはパスワードが間違っています" 73 @email = params[:email] 74 @password = params[:password] 75 render("users/login_form") 76 end 77end 78 79 def logout 80 session[:user_id] = nil 81 flash[:notice] = "ログアウトしました" 82 redirect_to("/users/login") 83 end 84 85 def ensure_correct_user 86 if @current_user.id != params[:id].to_i 87 flash[:notice] = "権限がありません" 88 redirect_to("/posts/index") 89 end 90 end 91 92#private 93 # Use callbacks to share common setup or constraints between actions. 94 #def set_post 95 #@user = User.find(params[:id]) 96 #end 97end 98

Ruby

1#views 2 3<div class="main users-new"> 4 <div class="container"> 5 <div class="form-heading">ログイン</div> 6 <div class="form users-form"> 7 <div class="form-body"> 8 <% if @error_message %> 9 <div class="form-error"> 10 <%= @error_message %> 11 </div> 12 <% end %> 13 14 <%= form_tag("/login") do %> 15 <p>メールアドレス</p> 16 <input name="email" value="<%= @email %>"> 17 <p>パスワード</p> 18 <input type="password" name="password" value="<%= @password %>"> 19 <input type="submit" value="ログイン"> 20 <% end %> 21 </div> 22 </div> 23 </div> 24</div> 25

Ruby

1#routes 2 3Rails.application.routes.draw do 4 resources :posts 5 6 # For details on the DSL available within this file, see https://guides.rubyonrails.org/routing.html 7 get "signup" => "users#new" 8 get "login" => "users#login_form" 9 post "login" => "users#login" 10 post "logout" => "users#logout" 11 12 root 'posts#index' 13end 14

試したこと

routeを確認したがlogin_pathがきちんとある。
get postの表示も確認した。

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

macOS Catalina 10.15.4
rails 6.0.2.2
Ruby 2.6.3p62

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

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

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

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

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

no1knows

2020/04/20 06:05

usersなしの/loginではどうでしょうか?
tetsuya7724

2020/04/20 06:20

Rails.application.routes.draw do resources :posts # For details on the DSL available within this file, see https://guides.rubyonrails.org/routing.html get "signup" => "users#new" get "login" => "login_form" post "login" => "login" post "logout" => "logout" root 'posts#index' end このように書き直しましたが、同じエラーが発生しました。
no1knows

2020/04/20 07:00

もう一度書きますが、usersなしの/loginではどうでしょうか?
tetsuya7724

2020/04/20 07:05

<%=link_to("ログイン", "/users/login") %>ですか? <%=link_to("ログイン", "/login") %>に変更したらできました。
no1knows

2020/04/20 07:58

/users/loginではなく、/loginです。 Routesで設定しているのはget "login" => "users#login_form"となっているので、URLがlocalhost/loginのときに、usersコントローラーのloginアクションを実行しますという意味です。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問