36

레일 3는 자바 스크립트를 방해하기 위해 몇 가지 멋진 물건을한다, 그래서 그들은이 같은 일을했습니다 ..Rails 3의 "data-method = 'delete'"Gragrafully Degrade?

<a href="/logout" data-method="delete" rel="nofollow">Logout</a> 

= link_to "Logout", user_session_path, :method => :delete 

..converts을하지만 그냥 나에게 발생하면 I javascript를 끄면 메소드가 더 이상 삭제되지 않고 예상대로 실행됩니다. 그렇다면 이러한 data- 속성이 정상적으로 저하되도록 허용 할 계획이 있습니까? 아니면 링크가 여전히 DELETE 요청입니까?

답변

37

data- 속성을 사용하여 레일스 3에서 변경 한 사항은 우아한 저하가 아니라, 눈에 잘 띄지 않는 JavaScript에 관한 것입니다.

레일 2에서 링크에 :method => :delete을 지정하면 숨겨진 입력이있는 양식을 만든 다음 양식을 제출하는 전체 인라인 JavaScript가 생성됩니다. 그것은 현재와 같았습니다 : 자바 스크립트를 끄고 기본값은 GET 요청입니다. 따라서 JavaScript가없는 경우 지원은 이전과 동일합니다.

하나의 옵션은 링크 대신 양식/버튼을 사용하여 레일스 2 자바 스크립트처럼 숨겨진 필드로 메소드를 포함 할 수 있습니다. 또 다른 옵션은 GET 버전에서 중간 페이지로 이동하게하는 것입니다. 중간 페이지는 차례로/버튼을 갖습니다.

새로운 접근 방식의 이점은 눈에 거슬리지 않아야한다는 것입니다. HTTP 동사를 변경하기위한 JavaScript는 외부 파일에 존재하며 data- 속성을 사용하여 첨부해야하는 요소를 결정합니다.

4

유일한 기회는 양식을 정의하는 것입니다. 링크는 _method = "delete"인 Javascript 또는 양식이없는 POST가 될 수 없습니다.

+0

는 쿼리 문자열을 가질 수 _method = 삭제 – myfreeweb

+0

할 수있는 작품, 예를 링크 자체는 자바 스크립트를 통해 사후로드 할 때 나를 위해 일을 잘 – shingara

21

오히려 link_to 방법을 사용하는 것보다 - 당신이 HTTP 방식이 DELETE 있는지 확인하기 위해 자바 스크립트를 사용하여 필요로하는 -은 HTTP를 치료하기 위해 레일을 알려주는 숨겨진 입력 요소와 폼을 만들 것이다 button_to 방법을 사용 방법은 POST이 아닌 DELETE입니다. 필요한 경우 CSS를 사용하여 링크 모양처럼 단추 모양을 지정할 수 있습니다.

+0

방지 레일 그것을 양식으로 바꾸는 것에서. 나는'button_to'가 페이지가로드 된 후에 자바 스크립트가 아닌 루비 쪽의 폼으로 바뀌기 때문에 작동한다고 생각합니다. 전에'button_to'에 대해 들어 본 적이 없으니, 고마워요! – LouieGeetoo

1

자바 스크립트가 없으면 불가능합니다.

나는 data-method 링크 속성을 의사 숨겨진 양식 (예 : laravel 프로젝트에서 사용됨)으로 변환하기위한 작은 jQuery 플러그인을 만듭니다.

당신이 그것을 사용하려는 경우

: https://github.com/Ifnot/RestfulizerJs