2010-07-07 12 views
1

에만의 http 동사를 연결하려고합니다.레일에서 HTTP 동사를 라우팅

map.resources :comments 

을 그리고 DELETE /comments 요청을 전송하여 모든 댓글을 파괴 할 수 있도록하고 싶습니다 : 나는 코멘트과 같이 자원 말해봐. 나는. 나는 경로의 "action name"부분없이 http 동사 만 매핑 할 수 있기를 원합니다. 이것이 가능한가?

건배

이 작업을 수행 할 수

답변

2

:

같은 경로를 생산
map.resources :comments, :only => :destroy 

다음

DELETE /comments/:id(.:format) {:controller=>"comments", :action=>"destroy"} 

을 (당신은 rake routes으로 확인할 수 있습니다)하지만 편안하고 설계되어 파괴주의 제거를 위해 특정 레코드가 아닌 모두 r ecodes 그래서이 경로는 여전히 : id 매개 변수를 기대합니다. 해킹은 응용 프로그램 컨텍스트에서 "모든"을 나타내는 id에 대한 일부 센티널 값을 전달하는 것일 수 있습니다.

다른 의견은 다른 모델에 속한 경우 다른 모델을 제거하면 댓글을 삭제하거나 삭제해야합니다. 이것은 일반적으로 여러 행 삭제가 일반적으로 발생할 수있는 방법입니다.

+0

이 경우 댓글 리소스는 단지 허구였습니다 ^^ 기본 '제거'경로와 마찬가지로 실제로이 작업을 수행하는 방법이 있어야합니다 ... –

1

표준 RESTful 동작이 아니기 때문에 맞춤 경로를 사용해야합니다. 컨트롤러에서

map.connect '/comments', 
    :controller => 'comments', 
    :action => "destroy_all", 
    :conditions => { :method => :delete } 

:보기에서

class CommentsController < ApplicationController 
    # your RESTful actions here 

    def destroy_all 
    # destroy all your comments here 
    end 
end 

, 다음과 같이 호출 :

<%= link_to "delete all comments", 
     comments_path, 
     :method => :delete, 
     :confirm => "Are you sure" %> 

추신. 이 코드를 테스트하지는 않았지만 제대로 작동해야한다고 생각합니다.

+0

컬렉션 리소스에 대한 DELETE'ing이 RESTful 일 것이라고 생각합니다. 답장을 보내 주셔서 감사합니다. :) –

+1

: collection 속성을 사용하면 URL이/messages/delete_all로 생성되며 질문에 따라 바람직하지 않습니다. –

관련 문제