2016-06-15 3 views
4

을 파괴라우팅이 같은 세션 컨트롤러에 대한 파괴 활동에 연결하고있어 행동

없음 경로 일치 {: 행동 => "파괴"컨트롤러 => "세션"} 필요한 키 누락 : [: ID]

,

링크를 제공 할 객체 ID가 없을 때 파괴 액션에 링크하고 REST/리소스 방법론을 레일스에 유지하려면 어떻게해야합니까?

+0

'레이크 루트'를 할 때 세션에 어떤 프리픽스를 사용합니까? – Kumar

+0

그런 다음 개체 ID가없는 경우이 링크를 표시하면 안됩니다. –

+0

세션에 ID가 없습니다. –

답변

6

routes.rb 단일 자원으로 당신의 세션 컨트롤러에 경로를 치료하는 것이 가장 좋습니다

resource :sessions 

문서 : http://guides.rubyonrails.org/routing.html#singular-resources

이 당신에게 경로를 줄 것이다 신분증없이 사용할 수 있습니다.

/DELETE 세션 세션 번호는

+0

그렇게 생각하지 않았어! +1 – RSB

0

당신은과 같이, 그 경로에 세션 자원을 전달해야

<%= link_to "Sign out", session_path(session), method: :delete %> 

레일 쇼를 삭제 작업은 자원을 필요로한다.

3

destroy 당신이 그것을 작동하게하는 PARAMS에서 id을 통과해야, 회원 경로,하지만 당신은 도움이 수집 경로

resources :sessions, only: [:new, :create] do 
    delete :destroy, on: :collection 
end 

희망으로 변환이 작업을 수행 할 수 있습니다!

1

기본적으로 destroy 메소드는 링크와 함께 전달되어야하는 id를 필요로합니다. 예 : 당신의 목적은 단지/명확한 세션을 삭제하는 경우 사용자가 로그인 한 사용자가 세션을 파괴하고, 당신이 경우 id 또는 로그인 한 사용자의 session, 을 통과해야, 귀하의 링크는 다음과 같이 <%= link_to "Sign out", session_path(user.id), method: :delete %> 또는 을해야한다 그때 만 당신은 길을 바꾸어야합니다.

resources :sessions, only: [:new, :create] 
delete '/session', to: 'sessions#destroy' 

두 가지 유형의 링크 (ID를 전달할 수도 있음)를 원한다면이 경로를 시도해야합니다. delete '/session(/:id)', to: 'sessions#destroy'

0

당신은 당신의 사건에 DELETE 방법 /users/sign_out 또는 sessions/sign_out하지 /sessions 될 수있는 경로를 변경해야 파괴한다.

devise의 session destroy 동작과 경로를 살펴보십시오.

그래서, 당신은 sessions#destroy를 가리키는 경로 /session/sign_out를 만듭니다

resource :session do 
     delete :destroy, path: 'sign_out', as: "destroy" 
    end 

같은 것을 사용할 수 있습니다 그리고 당신은 destroy_session_path로보기에 호출 할 수 있습니다.