복붙노트

[RUBY-ON-RAILS] 링크 그것을 위해 레일을 LINK_TO 사용 후

RUBY-ON-RAILS

링크 그것을 위해 레일을 LINK_TO 사용 후

내가 가진 POST 요청을 제출해야하는 링크가 있습니다. 일반적으로, 내가 jQuery를 사용하여 링크의 기본 동작을 방지하고 다음 목적지로 양식을 제출 것입니다. 뭔가 레일이 나를 도울 수있을 것 같은이 보인다. 과연는 LINK_TO 방법은 POST의 HTTP 메서드를 지정하는 옵션이 있습니다 :

link_to "Profile", 'http://example.com/profile', method: :post

작동,하지만 난 너무이 개 매개 변수를 추가해야합니다. 나는 시도했다 :

link_to "Profile", 'http://example.com/profile', method: post, param1: 'value1', param2: 'value2'

그것은 바로 의 HTML 요소에 이러한 매개 변수를 추가하지만 링크를 클릭 할 때 사람들을 제출하지 않은 :

<a rel="nofollow" param1="value1" param2="value2" data-method="post" href="http://example.com/profile">Profile</a>

LINK_TO 또는 기타 레일 방법을 사용하여 매개 변수를 사용하여 POST 요청을 할 수있는 방법이 있나요? 나는 레일 3.2.9를 사용하고 있습니다.

해결법

  1. ==============================

    1.짧은 대답은 "매개 변수"가 무슨 뜻인지는 양식 필드의 경우, 당신은 단순히 (적어도하지 내가 볼 수있는 간단한 방법으로)이 작업을 수행 할 수 있다는 것입니다. (즉, 당신이 같이 할 거라면) 대신 링크처럼 보이도록 제작 된, 훌륭한 제출 버튼과 양식을 사용해야합니다.

    짧은 대답은 "매개 변수"가 무슨 뜻인지는 양식 필드의 경우, 당신은 단순히 (적어도하지 내가 볼 수있는 간단한 방법으로)이 작업을 수행 할 수 있다는 것입니다. (즉, 당신이 같이 할 거라면) 대신 링크처럼 보이도록 제작 된, 훌륭한 제출 버튼과 양식을 사용해야합니다.

    다른 한편으로는 쿼리 매개 변수를 의미했다면, 다음이 작동합니다 :

    link_to "Profile", profile_path(@profile.id, param1: 'value1', param2: 'value2'), method: :post
    
  2. ==============================

    2.당신은 URL이 방법으로 매개 변수를 인코딩 할 수 있습니다 :

    당신은 URL이 방법으로 매개 변수를 인코딩 할 수 있습니다 :

    link_to "Profile", 'http://example.com/profile?' + {param1: 'value1', param2: 'value2'}.to_param, method: :post
    

    그것은 당신의 요구에 맞게하지 않으면 당신은 LINK_TO보다 양식을 사용하여 더 나은된다.

  3. ==============================

    3.사용자가 사용할 수 JS가 있거나 당신이 기본적으로 제공되는 눈에 거슬리지 JS 라이브러리를 제거한 경우, LINK_TO가 자동으로 GET 요청을 통해 제출 않습니다.

    사용자가 사용할 수 JS가 있거나 당신이 기본적으로 제공되는 눈에 거슬리지 JS 라이브러리를 제거한 경우, LINK_TO가 자동으로 GET 요청을 통해 제출 않습니다.

    일반적으로, 나는 POST 요청을 수행하는 링크를 가지고 매우 좋아 아닙니다. 그 양식과 버튼의 역할을 생각합니다.

    따라서, 쉬운 (안전한) 대안 도우미 button_to 레일을 사용하는 것입니다 :

    button_to 'Profile', profile_path(@profile, param1: 'value1', param2: 'value2')
    

    button_to 또한 방법 옵션을 지원하지만 난 그냥 생략했습니다 있도록 기본값으로하여 게시 할 수 있습니다.

  4. ==============================

    4.POST 데이터를 위해, 당신은 양식이 필요합니다. 그러나, 당신은 버튼을 제출하지 않아도됩니다. 당신이 어떤 이유로 링크처럼 보이게하려는 경우, 당신은 실제로에게 링크를 만들 수 있습니다 자바 스크립트를 통해 제출하는 형태로 그. 아래의 예에서 POST 자원은 더 폼 입력 컨트롤이 없기 때문에 어떤 필드를 필요로하지 않는 단순한 REST 동작입니다. 일부 데이터를 게시하고 싶었다면, 단지 형태로 숨겨진 입력 필드를했습니다.

    POST 데이터를 위해, 당신은 양식이 필요합니다. 그러나, 당신은 버튼을 제출하지 않아도됩니다. 당신이 어떤 이유로 링크처럼 보이게하려는 경우, 당신은 실제로에게 링크를 만들 수 있습니다 자바 스크립트를 통해 제출하는 형태로 그. 아래의 예에서 POST 자원은 더 폼 입력 컨트롤이 없기 때문에 어떤 필드를 필요로하지 않는 단순한 REST 동작입니다. 일부 데이터를 게시하고 싶었다면, 단지 형태로 숨겨진 입력 필드를했습니다.

    <%= form_tag('http://something_postable', :method => :post, :class => 'internal') %></form>
    <%= link_to_function('Label for Link', 'previous("form").submit()', :title => 'Hover text for link') %>
    

    당신이 그것을 스타일이나 CSS를 통해 그것을 숨길 수 있도록 양식 클래스를 지정됩니다 (예를 들어, '디스플레이 : 인라인')

  5. ==============================

    5.매개 변수 및 HTTP 메소드 함께 {: '값 1', PARAM2 '값 2': 방법 : 포스트 PARAM1}해야한다

    매개 변수 및 HTTP 메소드 함께 {: '값 1', PARAM2 '값 2': 방법 : 포스트 PARAM1}해야한다

    <%= link_to "Profile", profile_path(@profile), {param1: 'value1', param2: 'value2', method: :post} %>
    
  6. from https://stackoverflow.com/questions/13414663/using-rails-link-to-for-links-that-post by cc-by-sa and MIT license