Rubbyon Rails [오류 메모] Routing Error No route matches "/users/sign out"
전제 조건
ruby 2.5.1
Rails 5.2.4.4
학교 과제에서는 루비 온 레일스 애니메이션 투고 앱을 제작하고 있다.
하고 싶은 일
Devise 기능의 로그아웃
오류 상태
1) 로그아웃이 다음과 같이 설정되어 있습니다.
app/views/layouts/application.html/erb
<% if user_signed_in? %>
<div class="collapse navbar-collapse" id="Navber">
<ul class="navbar-nav mr-auto">
<li class="nav-item">
<%= link_to 'マイページ', user_path, class: "nav-link" %>
</li>
<li class="nav-item">
<%= link_to '新規投稿', new_movie_path, class: "nav-link" %>
</li>
<li class="nav-item">
<%= link_to '投稿一覧', movies_path, class: "nav-link" %>
</li>
<li class="nav-item">
<%= link_to "ログアウト", destroy_user_session_path, method: :delete, class: "nav-link" %>
</li>
</ul>
</div>
2) 로그아웃하면 유감입니다, 오류!
해본 일
1. delete 메서드의 루트 설정이 잘못되었을 수 있습니다.rails routes를 통해 확인합니다.
rails routesdestroy_user_session GET /users/sign_out(.:format) devise/sessions#destroy
어?방법은 GET!
만일의 경우를 대비하여 다른 devise가 적용된 rails routes(다음에는'샘플'이라고 함)를 참고하여 확인한다.
rails routes(샘플)
destroy_user_session DELETE /users/sign_out(.:format) devise/sessions#destroy
데레트가 되어라!
3.뭐가 달라요?routes.rb 검사!
routes.rb(샘플)delete 'tweets/:id' => 'tweets#destroy'
routes.rb(제작 중인 코드) resource :user, except: [:new, :create, :destroy]
....
견본은 delete로 설명합니다.
제작 중인 코드는 Resource 방법을 사용합니다.
좋아, 좋아, 나쁘다, 나쁘다, 나쁘다, 나쁘다???
4. 먼저 except: [:destroy]의 destroy를 삭제합니다.
오류 routes.rb resource :user, except: [:new, :create]
그러나 로그아웃하는 동안 오류가 발생했습니다.
5. 그럼 다음 내용을 추가!저는 리소스랑 이중인 것 같아요...
오류 routes.rb delete 'users/:id' =>'users#destroy'
6. 잘못이 바뀌었다!한 줄의 오류입니다.
7. 오류: "UsersController의 destroy action을 찾을 수 없습니다."
다음 내용을 보충하여 해결(오류가 아니라 로그아웃 후 옥상 화면으로 들어갑니다!)했어!
● 루비 온 레일스 튜토리얼 8장 3항'로그아웃'은 참조.
app/controllers/users_controller.rb def destroy
session.delete(:user_id)
@current_user = nil
redirect_to root_url
8. 혹시 모르니까 rails routes 확인하세요.destroy_user_session GET /users/sign_out(.:format) devise/sessions#destroy
응.
역시 방법은 GET답다.
조금 모호하지만 오류는 없을 테니 제가 해결할게요.
GET도 로그아웃할 수 있는 이유는 무엇입니까?누가 알려주면!!
총결산
오류(완전한 오해):
Devise 기능의 로그아웃
오류 상태
1) 로그아웃이 다음과 같이 설정되어 있습니다.
app/views/layouts/application.html/erb
<% if user_signed_in? %>
<div class="collapse navbar-collapse" id="Navber">
<ul class="navbar-nav mr-auto">
<li class="nav-item">
<%= link_to 'マイページ', user_path, class: "nav-link" %>
</li>
<li class="nav-item">
<%= link_to '新規投稿', new_movie_path, class: "nav-link" %>
</li>
<li class="nav-item">
<%= link_to '投稿一覧', movies_path, class: "nav-link" %>
</li>
<li class="nav-item">
<%= link_to "ログアウト", destroy_user_session_path, method: :delete, class: "nav-link" %>
</li>
</ul>
</div>
2) 로그아웃하면 유감입니다, 오류!
해본 일
1. delete 메서드의 루트 설정이 잘못되었을 수 있습니다.rails routes를 통해 확인합니다.
rails routesdestroy_user_session GET /users/sign_out(.:format) devise/sessions#destroy
어?방법은 GET!
만일의 경우를 대비하여 다른 devise가 적용된 rails routes(다음에는'샘플'이라고 함)를 참고하여 확인한다.
rails routes(샘플)
destroy_user_session DELETE /users/sign_out(.:format) devise/sessions#destroy
데레트가 되어라!
3.뭐가 달라요?routes.rb 검사!
routes.rb(샘플)delete 'tweets/:id' => 'tweets#destroy'
routes.rb(제작 중인 코드) resource :user, except: [:new, :create, :destroy]
....
견본은 delete로 설명합니다.
제작 중인 코드는 Resource 방법을 사용합니다.
좋아, 좋아, 나쁘다, 나쁘다, 나쁘다, 나쁘다???
4. 먼저 except: [:destroy]의 destroy를 삭제합니다.
오류 routes.rb resource :user, except: [:new, :create]
그러나 로그아웃하는 동안 오류가 발생했습니다.
5. 그럼 다음 내용을 추가!저는 리소스랑 이중인 것 같아요...
오류 routes.rb delete 'users/:id' =>'users#destroy'
6. 잘못이 바뀌었다!한 줄의 오류입니다.
7. 오류: "UsersController의 destroy action을 찾을 수 없습니다."
다음 내용을 보충하여 해결(오류가 아니라 로그아웃 후 옥상 화면으로 들어갑니다!)했어!
● 루비 온 레일스 튜토리얼 8장 3항'로그아웃'은 참조.
app/controllers/users_controller.rb def destroy
session.delete(:user_id)
@current_user = nil
redirect_to root_url
8. 혹시 모르니까 rails routes 확인하세요.destroy_user_session GET /users/sign_out(.:format) devise/sessions#destroy
응.
역시 방법은 GET답다.
조금 모호하지만 오류는 없을 테니 제가 해결할게요.
GET도 로그아웃할 수 있는 이유는 무엇입니까?누가 알려주면!!
총결산
오류(완전한 오해):
<% if user_signed_in? %>
<div class="collapse navbar-collapse" id="Navber">
<ul class="navbar-nav mr-auto">
<li class="nav-item">
<%= link_to 'マイページ', user_path, class: "nav-link" %>
</li>
<li class="nav-item">
<%= link_to '新規投稿', new_movie_path, class: "nav-link" %>
</li>
<li class="nav-item">
<%= link_to '投稿一覧', movies_path, class: "nav-link" %>
</li>
<li class="nav-item">
<%= link_to "ログアウト", destroy_user_session_path, method: :delete, class: "nav-link" %>
</li>
</ul>
</div>
1. delete 메서드의 루트 설정이 잘못되었을 수 있습니다.rails routes를 통해 확인합니다.
rails routes
destroy_user_session GET /users/sign_out(.:format) devise/sessions#destroy
어?방법은 GET!만일의 경우를 대비하여 다른 devise가 적용된 rails routes(다음에는'샘플'이라고 함)를 참고하여 확인한다.
rails routes(샘플)
destroy_user_session DELETE /users/sign_out(.:format) devise/sessions#destroy
데레트가 되어라!3.뭐가 달라요?routes.rb 검사!
routes.rb(샘플)
delete 'tweets/:id' => 'tweets#destroy'
routes.rb(제작 중인 코드) resource :user, except: [:new, :create, :destroy]
....견본은 delete로 설명합니다.
제작 중인 코드는 Resource 방법을 사용합니다.
좋아, 좋아, 나쁘다, 나쁘다, 나쁘다, 나쁘다???
4. 먼저 except: [:destroy]의 destroy를 삭제합니다.
오류 routes.rb
resource :user, except: [:new, :create]
그러나 로그아웃하는 동안 오류가 발생했습니다.5. 그럼 다음 내용을 추가!저는 리소스랑 이중인 것 같아요...
오류 routes.rb
delete 'users/:id' =>'users#destroy'
6. 잘못이 바뀌었다!한 줄의 오류입니다.7. 오류: "UsersController의 destroy action을 찾을 수 없습니다."
다음 내용을 보충하여 해결(오류가 아니라 로그아웃 후 옥상 화면으로 들어갑니다!)했어!
● 루비 온 레일스 튜토리얼 8장 3항'로그아웃'은 참조.
app/controllers/users_controller.rb
def destroy
session.delete(:user_id)
@current_user = nil
redirect_to root_url
8. 혹시 모르니까 rails routes 확인하세요.destroy_user_session GET /users/sign_out(.:format) devise/sessions#destroy
응.역시 방법은 GET답다.
조금 모호하지만 오류는 없을 테니 제가 해결할게요.
GET도 로그아웃할 수 있는 이유는 무엇입니까?누가 알려주면!!
총결산
오류(완전한 오해):
이상은!
만약 잘못을 해결하는 데 도움을 줄 수 있다면 나는 매우 기쁠 것이다.
Reference
이 문제에 관하여(Rubbyon Rails [오류 메모] Routing Error No route matches "/users/sign out"), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/masakikato1108/items/90047b66ffe6b0b706c8텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)