2014-12-05 2 views
0

필자가 쓰는 블로그 앱의 모든 게시물을 파괴하는 destroyAll 액션을 추가하고 싶습니다.'destroyAll'액션을 추가하고 내 RESTful 레일 앱에 연결

Rails.application.routes.draw do 
    resources :writings 
    root "writings#index" 
end 

그리고 내 컨트롤러 내에서 나는 다음과 같은 작업을 추가 할 : :이처럼 내 routes.rb이있는 destroyAll 조치 방법에 경로를 추가하는 방법

def destroyAll 
    @writing = Writing.all 
    @writing.each.destroy 
end 

나를 통해 안내하시기 바랍니다 내 견해를 사용하여 그 행동을 사용할 수있는 링크를 만드십시오. 사전에 너무 많은

덕분에

그것은 writings의 수집 경로로 정의해야
+1

을 당신, 제발 버그,'@의 writing.each.destroy' 잘못이 내가로 교체해야 어떤 오류 –

+0

인상? –

답변

2

:

resources :writings do 
    collection do 
    delete :destroy_all 
    end 
end 

는 데,이 같은 delete_all 행동에 연결할 수 있습니다

link_to 'delete all', [:destroy_all, :writings], method: :delete 

에게 당신을 전자는 deleteAll 대신에 delete_all을 작성했음을 알아야합니다. 전자는 Ruby naming co 항의.

+0

오하이오 내 뷰에서이 경로를 어떻게 사용합니까? 나는 link_to "모두 삭제", delete_all_path를 사용합니까? 10 분 안에 대답을 수락합니다 –

+1

@ user3247496 내 대답을 편집하여이 작업에 연결하는 방법을 설명합니다. –

+0

당신은 최고의 사람입니다. 매우 감사. –

0

나는 Marek Lipka의 대답이 완벽하다고 생각하지만 IMFO가 좀 더 RESTful 인 대안을 제시하고자합니다. 나는 모두 writings의 콜렉션을 별도의 리소스로 모델링 할 것이다. 이 자원은 ID를 가지고 있지 않습니다 만이 자원의 인스턴스가있을 수 있기 때문에 단수 자원이 될해야합니다

resource :writings, only: :destroy 

레일은 레일 이후, WritingsController#destroy에이 작업을지도 것입니다이의 문제 (우리의 단수의 자원은 어쨌든 복수의 이름을 가짐) 하나의 자원을 위해 복수의 컨트롤러를 사용하기 때문에 이것은 개별적인 글에 대한 동작과 충돌 할 것이다. 이 경우

resource :writings, only: :destroy, action: :destroy_all 

: 다른 작업을

resource :writings, only: :destroy, controller: 'collections/writings' 

또는 당신은 여전히 ​​이전 컨트롤러를 사용할 수 있지만 지정이 경우 당신은이에 대한 사용자 정의 컨트롤러를 만들고 거기에 파괴 조치를 구현할 수 중 , 당신은 당신의 뷰에서 다음을 사용할 수

link_to 'delete all', writings_path, method: :delete 
관련 문제