前提・実現したいこと
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]
宜しくお願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2019/06/18 11:38