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

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

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

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

Ruby on Rails

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

Q&A

解決済

1回答

1145閲覧

Railsのルーティングエラー

退会済みユーザー

退会済みユーザー

総合スコア0

Devise

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

Ruby on Rails

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

0グッド

1クリップ

投稿2019/06/18 08:19

前提・実現したいこと

Railsでdeviseを使用したログイン機能の実装に加え、usersコントローラーを別で作成しusers#showでマイページへのリンクを作りたいですが、ルーティングエラーになってしまいます

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

Routing Error uninitialized constant UsersController Routes match in priority from top to bottom

該当のソースコード

ruby

1Rails.application.routes.draw do 2 devise_for :users 3 resources :users, only: [:index, :show] 4 resources :reviews, only: :show 5 resources :products, only: [:index, :show] do 6 resources :reviews, except: :show 7 end 8 root 'reviews#index' 9end 10

haml

1%header.bg-secondary 2 - if user_signed_in? 3 %span.d-inline.p-2 4 = link_to "レビューを書く", products_path 5 %span.d-inline.p-2 6 = link_to "マイページ", user_path(current_user.id) 7 -# = link_to "マイページ", "/users/#{current_user.id}" 8 %span.d-inline.p-2 9 = link_to "ログアウト", destroy_user_session_path, method: :delete 10 - else 11 %span.d-inline.p-2 12 = link_to "新規登録", new_user_registration_path 13 %span.d-inline.p-2 14 = link_to "ログイン", new_user_session_path

rake routes

Prefix Verb URI Pattern Controller#Action new_user_session GET /users/sign_in(.:format) devise/sessions#new user_session POST /users/sign_in(.:format) devise/sessions#create destroy_user_session DELETE /users/sign_out(.:format) devise/sessions#destroy new_user_password GET /users/password/new(.:format) devise/passwords#new edit_user_password GET /users/password/edit(.:format) devise/passwords#edit user_password PATCH /users/password(.:format) devise/passwords#update PUT /users/password(.:format) devise/passwords#update POST /users/password(.:format) devise/passwords#create cancel_user_registration GET /users/cancel(.:format) devise/registrations#cancel new_user_registration GET /users/sign_up(.:format) devise/registrations#new edit_user_registration GET /users/edit(.:format) devise/registrations#edit user_registration PATCH /users(.:format) devise/registrations#update PUT /users(.:format) devise/registrations#update DELETE /users(.:format) devise/registrations#destroy POST /users(.:format) devise/registrations#create users GET /users(.:format) users#index user GET /users/:id(.:format) users#show

アドレスバーの表示

http://localhost:3000/users/2

試したこと

prefixではなく相対パスでもやってみましたがダメでした。
無駄だと思いながらresources :users, only: [:index, :show]をdevise_for :usersよりも上に移動させてみましたが、これもダメでした。

if user_signed_in?に関しては、ログアウトするときちんとヘッダーが切り替わるので、問題なくtrueが返っていると思います。

エラー文から、ルーティングは上から読まれるから他のものが適用されてしまってるよ〜という意味かなと解釈しましたが、
アドレスバーにはusers/:idがきちんと効いていますし、
リファレンスも読みましたが具体的に何が起こっているのかが分かりませんでした。

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

ruby 2.5.1p57 (2018-03-29 revision 63029) [x86_64-darwin18]

宜しくお願いします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

app/controllers/users_controller.rb を作ってありますか?

投稿2019/06/18 11:29

winterboum

総合スコア23340

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

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

退会済みユーザー

退会済みユーザー

2019/06/18 11:38

作ってありましたが、よ〜く見たらファイル名がusers.controller.rbになっていました。。。 users_controller.rb に修正したらうまくいきました。 ありがとうございました!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問