게시하는 링크에 Rails link_to 사용


85

게시물 요청을 제출하는 데 필요한 링크가 있습니다. 일반적으로 jQuery를 사용하고 링크의 기본 동작을 방지 한 다음 대상에 양식을 제출합니다. 이것은 Rails가 나를 도울 수 있어야 할 것 같습니다. 물론이 link_to메소드에는 POST http 메소드를 지정하는 옵션이 있습니다.

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

작동하지만 2 개의 매개 변수도 추가해야합니다. 나는 시도했다 :

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

<a>HTML 요소 에 해당 매개 변수를 추가 했지만 링크를 클릭 할 때 제출하지 않았습니다.

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

link_to또는 다른 Rails 메소드를 사용하여 매개 변수로 POST 요청을 수행하는 방법이 있습니까? Rails 3.2.9를 사용하고 있습니다.


그렇게 할 수 있다고 생각하지 마십시오. net / http 또는 HTTParty를 사용하여 컨트롤러에서 가장 잘 수행 할 수 있습니까?
Mike Campbell

내 컨트롤러에서 할 수 없습니다. 사용자는 다른 사이트로 이동해야합니다. 당신이 옳은 것처럼 보이지만 나를 위해 이것을 수행하는 내장 링크 메커니즘이 없습니다.
at.

답변:


143

짧은 대답은 "매개 변수"가 의미하는 것이 양식 필드 인 경우 단순히이를 수행 할 수 없다는 것입니다 (적어도 내가 볼 수있는 간단한 방식은 아닙니다). 대신 링크처럼 보이도록 스타일이 지정된 제출 버튼이있는 양식을 사용해야합니다 (원하는 경우).

반면에 쿼리 매개 변수를 의미 했다면 다음과 같이 작동합니다.

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

1
방금 내 질문을 업데이트했으며 실제로 이러한 링크에 외부 URL을 사용하고 있습니다.
at.

기본적으로 링크를 사용하여 원하는 작업을 수행 할 수 없다는 메모를 추가했습니다. 제출 버튼이있는 양식이 필요합니다.
Chris Salzberg 2012

3
사용자가 자바 스크립트를 비활성화 한 경우 링크는 기본적으로 "GET"요청으로 설정됩니다.
bkunzi01

8

다음과 같이 URL에 매개 변수를 인코딩 할 수 있습니다.

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

필요에 맞지 않으면 link_to.


이것은 실제로 매개 변수를 추가하는 아주 좋은 방법입니다.
nathanvda

내 요구에 맞지 않습니다. 매개 변수는 POST 매개 변수 여야합니다. 하지만 감사합니다. to_param 메소드에 대해 몰랐습니다. ?애프터 프로필 도 필요 합니다.
at.

알겠습니다. 그러면 양식을 작성해야한다고 생각합니다. 이 논리를 여러 번 반복해야하는 경우이 양식을 빌드하는 도우미 메서드를 작성할 수 있습니다.
Adrien Coquio

1
이것이 OP의 질문에 대답하지 않음에도 불구하고 @shioyama의 답변에서와 같이 URL 도우미를 사용해야합니다
Ben West

@BenWest : 도우미는 처음에 사용되지 않았고 의미있는 것으로 가정했습니다 (예 : 외부 URL 일 수 있음)
Adrien Coquio

3

사용자가 JS를 사용하지 않도록 설정했거나 기본적으로 제공되는 눈에 잘 띄지 않는 JS 라이브러리를 제거한 경우 요청을 link_to통해 자동으로 제출됩니다 GET.

일반적으로 나는 POST요청 을 수행하는 링크를 좋아하지 않습니다 . 그것이 폼과 버튼의 역할이라고 생각합니다.

따라서 쉽고 안전한 대안은 Rails button_to 도우미 를 사용하는 것입니다 .

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

button_to또한 method옵션 을 지원 하지만 기본값으로 설정 post되어 있으므로 생략했습니다.


Kostas와 동의했습니다. 또한 link_to with method post는 Internet Explorer에서 잘 작동하지 않습니다.
Pierre-Yves O.

1

데이터를 게시하려면 양식이 필요합니다. 그러나 제출 버튼은 필요하지 않습니다. 어떤 이유로 링크처럼 보이게하려면 실제로 JavaScript를 통해 양식을 제출하는 링크로 만들 수 있습니다. 아래 예에서 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를 통해 스타일을 지정하거나 숨길 수 있습니다 (예 : 'display : inline').


1

매개 변수와 http 메소드는 함께 있어야합니다. {param1: 'value1', param2: 'value2', :method: :post}

<%= link_to "Profile", profile_path(@profile), {param1: 'value1', param2: 'value2', method: :post} %>
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.