2011-09-03 2 views
2

link_to에 대체 URL을 사용하는 간단한 방법이 있습니까? :method => :delete은 자바 스크립트가 비활성화 된 사람들에게 유용할까요?RESTful link_to : method => 자바 스크립트를 사용하지 않는 사용자를 위해 fallback을 사용하여 레일즈 3을 파기하십시오.

예를 들어 설명 목록이 있다고 가정합니다. 댓글을 삭제하는 링크를 추가하려면, 내가 넣을 수 있습니다

<%= link_to "Delete", comment_path(comment.id), :method => :delete %> 

이 내 UJS 드라이버 (내 경우에는 jquery_ujs)는 DELETE 요청으로 변합니다 data-method="delete"에 링크를 생성 할 것입니다. 그러나 javascript가 꺼지면 링크는 GET 요청 (docs에 광고 된대로)으로 따라 가고 내 컨트롤러는 당연히 혼란 스럽습니다.

이 문제를 해결할 수있는 좋은 방법이 있습니까? 하나의 솔루션을 보여주는 Railscast 77이 있지만, 이것은 엄청난 양의 여분의 코드가 필요하고 매우 우아한 :method => :delete 솔루션을 내 보냅니다. 자바 스크립트가 비활성화되었을 때 확인 - 삭제 페이지에 대한 링크를 생성하면 괜찮을 것입니다.

내가 생각할 수있는 유일한 해결책은 button_to 페이지와 UJS를 사용하여 해당하는 link_to으로 바꾸는 것입니다. 이것은 어떻게 든 나에게 꽤 맞는 것처럼 보이지 않는다. 그러나 아마 OK이다? 다른 아이디어?

+0

관심이있는 사람이라면 button_to를 거의 동일한 link_to로 대체 할 jQuery를 작성했습니다. button_to가 추가 컨트롤러 메소드 (Max에서 게시 한 링크의 delete와 같은)를 소개하지 않으면 button_to가 확인을 얻을 기회가 없기 때문에 여기서 그 메소드를 사용하게 될 것이라고 생각하지는 않지만 볼 수 있습니다. 다른 상황에서 일하고 있습니다. – dantswain

답변

1

는 개인적으로 내가 ... 내가 사용하는 솔루션 즉, 대신 link_tobutton_to 당신이 생각 한 것과 동일 그것은 : 편안하고 아니라하는 :get:delete 매핑의 아이디어를 좋아하지 않는다 필요한 경우 CSS 스타일을 사용하여 링크처럼 보이도록 단추를 사용할 수 있습니다.

+0

액션에서 레코드를 수정하지 않는 한'delete' 액션을'get'으로 매핑하는 데 아무런 문제가 없습니다. 그가'_method = delete'로'post'를 요구하는'destroy' 액션을 계속 사용한다면 여전히 RESTful입니다. 'button_to'는 옵션이지만 다른 양식 내에서 사용하지 마십시오. 'get' delete /'post' delete 메쏘드는 ASP.NET MVC가 어떻게 동작 하는지를 확인하는 폼입니다.'get'은 확인 폼으로 리디렉션되고'post'는 실제로 레코드를 삭제합니다. –

+0

감사합니다. 나는 파괴 행위가 실제로 파괴를 일으키는 한 그것이 계속 RESTful하다는 것에 동의한다고 생각합니다. 그래도 여전히 우아하지 않습니다. – dantswain