2011-03-15 4 views
11

는 최근이 문제로 실행 : 내이 작동하지 않는 link_to 'test', test_path(:test => test), :method => :post 이유 Rails 3 link_to (:method => :delete) not working레일즈 3 링크 생성기 : post, : put, & : delete?

이있는 내가 혼란스러워했다 (이하기보다는 게시 된 이유). 위의 게시물에서 알 수 있듯이, 레일즈 javascript 파일이 없기 때문에 동적으로 양식을 :post, :put & :delete에 대해 처리합니다.

내 앱이 자바 스크립트가 정상적으로 작동하지 않게하려면 자바 스크립트에 의존하는 것이 좋다고 확신하지 못합니다. 그것은 내가 어떻게 개발하고 싶은지 (그래서 모든 Rails 프로그래밍 기능이 올바르게 작동한다는 것을 알기 때문에), 자바 스크립트로 내 애플 리케이션을 연결할 때, 보통이 기능을 복제하는 것에 대해 걱정할 필요가 없다. Rails에서 생성 된 javascripts 파일

기술적으로 하이퍼 링크 (앵커 요소)는 GET 요청에만 사용해야하며 양식 요소의 일부인 단추는 다른 메서드에 사용해야합니다.

그래서, 내 두 가지 질문 :

  1. 은 보석은 내 뷰를 렌더링 할 때가 온 - 더 - 플라이 폼 요소에 내보기에서 link_to ... :method =>를 다시 작성합니다 거기 밖으로인가?
  2. 그렇지 않다면 필자는 뷰 파서를 통해 내 자신 만의 글을 쓸 수 있습니까?

    = link_to 'Test Link', some_path(:with => some_resource), :method => :post 
    

    ... 그리고 내 렌더링 된 HTML 출력이 함께 나와있다 : 내가 좋아하는 것이 무엇인지, 본질적으로

를 (양호하게는, HAML 사용) 내 HAML 파일이 작성하는 것입니다

<form action="some_path?with=some_resource" method="post"> 
    <!-- insert appropriate _method hidden field here --> 
    <!-- add appropriate csrf token and whatnot --> 
    <button type="submit">Test Link</button> 
</form> 

... 정의 된 방법과 모든 link_to 헬퍼는 자바 스크립트없이 작동합니다 (따라서, 동사 GET되어 일반 링크에 영향을주지 않습니다) 있도록?


나는이 질문의 이유 부분에 대해 어떤 생각을 감사하겠습니다 특히 레일 팀은 순수 HTML을 통해이 일을하기보다는 자바 스크립트에 연결이 기능을 유지하기로 결정 이유는 무엇입니까?

답변

22

정말 단일 요소 양식 (이 경우 버튼)이 필요합니다.

button_to 'Test Link', some_path(:with => some_resource), :method => :post

이 그것의 내부 input[type=submit] 요소와 양식을 생성합니다 : 그렇다면, 당신은 button_to 도우미를 원한다.

Javascript가 없으면 "가져 오기"이외의 HTTP 동사를 사용하여 제출할 하이퍼 링크를 가질 수 없습니다.

module LinksHelper 
    def link_form(text, destination, options = {}) 
    form_tag(destination, :method => options.delete(:method)) do 
     <<-HTML 
     <!-- some HTML code here --> 
     <button type="submit">#{text}</button> 
     <!-- some more HTML code here --> 
     HTML 
    end 
    end 
end 
+0

대 : 당신이 button_to에 의해 렌더링되는 형태의 더 스타일/제어해야하는 경우

, 당신은 같은 것을 할 수 있습니다. 이것은 저에게 일할 무언가를줍니다. 감사! – neezer

관련 문제