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

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

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

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

URL

URL(ユニフォームリソースロケータ)とは、インターネット上のリソース(Webページや電子メールの宛先等)を特定するための形式的な記号の並びの事を言う。

Ruby on Rails

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

ルーティング

ルーティングとは、TCP/IPネットワークにおいて、目的のホストまでパケットを送る為のパス選定のプロセスを言います。

ログイン

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

Q&A

2回答

3378閲覧

Routing Error uninitialized constant Usersの原因を知りたい

YuichiKanno

総合スコア5

Devise

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

URL

URL(ユニフォームリソースロケータ)とは、インターネット上のリソース(Webページや電子メールの宛先等)を特定するための形式的な記号の並びの事を言う。

Ruby on Rails

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

ルーティング

ルーティングとは、TCP/IPネットワークにおいて、目的のホストまでパケットを送る為のパス選定のプロセスを言います。

ログイン

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

0グッド

0クリップ

投稿2019/11/22 03:32

「状況」

現在、Railsにdeviseを導入し、ログイン周りを実装中です。

deviseで作成されたsessions controllerで
ログインのアクション、viewでログインフォームを作成しました。

下記のようなルーティングを設定し、login_pathで
ページに遷移されると考えたのですが、routing errorが発生しています。

「試したこと」
・アプリケーションに直接urlを打ち込んでもエラーが発生しました。
・同様の状況がないかQiita等で調べましたが、原因がわかりませんでした。

以下、詳しい状況を記載します。

routes.rb

Rails.application.routes.draw do root 'static_pages#home' get 'static_pages/home' devise_for :users devise_scope :user do get "user/:id", :to => "users/registrations#detail" get "signup", :to => "users/registrations#new" post "signup", :to => "users/registrations#create" get "login", :to => "users/sessions#new" post "login", :to => "users/sessions#create" delete "logout", :to => "users/sessions#destroy" end resources :users, only: [:index, :show] end

sessions_controller

class SessionsController < ApplicationController def new end def create user = User.find_by(email: params[:session][:email].downcase) # user = User.find_by(username: params[:session][:username]) if user && user.authenticate(params[:session][:password]) log_in user params[:session][:remember_me] == '1' ? remember(user) : forget(user) redirect_back_or user else flash.now[:danger] = 'ユーザーネームもしくはパスワードが正しくありません' render 'new' end end def destroy log_out if logged_in? redirect_to root_url end end

イメージ説明

イメージ説明

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

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

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

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

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

guest

回答2

0

routing error とは言われていません、Usersが未定義だと言われています。

今回、registration_controller は usersというファイルの中にあるので、このままで動きました。

ここがよくわからないのですが、registration_controller は controllers/registration_controller.rb であるのでは?

提示されている sessions_controller.rb は controllers/users/sessions_controller.rb ですか?
もし、yesなら class名がおかしいです。
もし、No なら controllers/users/sessions_controller.rb が多分必要です

など、session、registration周りのファイル構成が見えないので間違えるかもしれません。
controllers の下に有る、user、登録、ログイン関係のファイルの一覧をいただけますか? 「関係ないと『思う』ので省略」はできるだけなしに。

投稿2019/11/22 04:39

winterboum

総合スコア23284

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

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

YuichiKanno

2019/11/22 04:56 編集

回答ありがとうございます。 app     | controllers      | Users      | confirmations_controller.rb      | omniauth_callbacks_controller.rb       | passwords_controller.rb       | registrations_controller.rb       | sessions_controller.rb       | unlocks_controller.rb      | application_controller.rb       | static_pages_controller.rb       | users_controller.rb となっており、 下記3つはcontrollersファイル直下 それ以外は Users ファイルの中に格納されています。 見にくくてすみません。お願い致します。
winterboum

2019/11/22 05:00 編集

Users ファイルの中 ですか? Users フォルダー では? とすると Users ではなく users とすべきです。 また例えば controllers/users/sessions_controller.rb は class SessionsController < ApplicationController ではなく class Users::SessionsController < ApplicationController です 若しくは module Users class SessionsController < ApplicationController end end
guest

0

rb

1devise_scope :user do 2 get "user/:id", :to => "users/registrations#detail" 3 # ...

"users/registrations#detail"ではなく"devise/registrations#detail"ではないですか?

Configuring routes

投稿2019/11/22 04:01

編集2019/11/22 04:02
Mugheart

総合スコア2340

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

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

YuichiKanno

2019/11/22 04:06

今回、registration_controller は usersというファイルの中にあるので、このままで動きました。 login_pathについてのrouting errorもあると思ったのですが、違うのでしょうか。
Mugheart

2019/11/22 04:46 編集

Deviseを使ったことがないのでドキュメントを読んでの回答しかできませんが、 > 今回、registration_controller は usersというファイルの中にあるので というのはどういう意味でしょうか?コントローラをカスタマイズしたという意味であれば、その記述をdevise_for の部分でするべきだと思いますが...。 カスタマイズしたら "users/registrations#detail" のように書き換えるといった旨のテキストも見当たりません。 YuichiKanno さんは何を根拠にこのままで動くとおっしゃっているのか教えていただけますか? そこを確認しますので。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

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

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問