[ruby-on-rails] 게시하는 링크에 Rails link_to 사용

게시물 요청을 제출하는 데 필요한 링크가 있습니다. 일반적으로 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를 사용하고 있습니다.



답변

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

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

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


답변

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

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

필요에 맞지 않으면 link_to.


답변

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

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

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

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

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


답변

데이터를 게시하려면 양식이 필요합니다. 그러나 제출 버튼은 필요하지 않습니다. 어떤 이유로 링크처럼 보이게하려면 실제로 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’).


답변

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

<%= link_to "Profile", profile_path(@profile), {param1: 'value1', param2: 'value2', method: :post} %>


답변