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

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

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

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

Ruby on Rails

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

Q&A

解決済

1回答

1856閲覧

Rails routesでdeviseのusers/sign_outとusers/:nameが競合してしまう

ryoya1122

総合スコア16

Ruby

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

Ruby on Rails

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

0グッド

0クリップ

投稿2020/03/09 08:39

編集2020/03/09 08:39

Railsのroutesでusersのresourcesとdevise_for :usersが重複しているのですが、前にroutesは上から順番に読み込まれるのでアドレスが重複してる場合は優先させたいルートを上に書けばいいと見たことがあり、現在のルートが

routes.rb

1Rails.application.routes.draw do 2 root to: "home#index" 3 4 devise_for :users, controllers: { 5 registrations: 'users/registrations', 6 sessions: "users/sessions", 7 } 8 resources :users, param: :name 9 10 resources :tweets do 11 resource :favorites, only: [:create, :destroy] 12 end 13 resources :relationships, only: [:create, :destroy] 14end

このようになっているのですが、この状態でusers/sign_outをするとusers/:name のルートへアクセスしてしまいます。

/users/sign_inにアクセスした際は、想定している動作をし、sessions#newを呼ぶのですが、Sign_outだけがsessions#destroyへアクセスせず、usersのshowを呼び、Couldn't find Userになります。(存在しないsign_outというnameカラムを持つuserのshowを呼び出しているため)

以下はrails/info/routesです

どなたか同じような経験をされている方がいましたら、ご教授お願いいたします。

new_user_session_path GET /users/sign_in(.:format)
users/sessions#new

user_session_path POST /users/sign_in(.:format)
users/sessions#create

destroy_user_session_path DELETE /users/sign_out(.:format)
users/sessions#destroy

........................................................................

........................................................................
user_path GET /users/:name(.:format)
users#show

PATCH /users/:name(.:format)
users#update

PUT /users/:name(.:format)
users#update

DELETE /users/:name(.:format)
users#destroy

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

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

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

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

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

guest

回答1

0

ベストアンサー

views 部分では、
どのようなコードを記述されていますでしょうか。

httpsリクエストmethodが、deleteになっているでしょうか。

投稿2020/03/09 09:02

fshun

総合スコア261

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

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

ryoya1122

2020/03/09 09:08

アドレスを直接入れて動作を試していたため、users/sign_outのDeleteメソッドではなくusers/:nameのGETが優先されていたようです。初歩的なミスでした。 ご回答ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問