Подтвердить что ты не робот

Использование 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="#" onclick="location.href='http://example.com/profile'; return false;">Profile</a>

Есть ли способ сделать запрос POST с параметрами с помощью link_to или любого другого метода Rails? Я использую Rails 3.2.9.

4b9b3361

Ответ 1

Короткий ответ заключается в том, что если вы подразумеваете под "параметрами", это поля формы, то вы просто не можете этого сделать (по крайней мере, не так просто, как я вижу). Вместо этого вы должны использовать форму с кнопкой отправки, чтобы выглядеть как ссылка (если это то, что вы хотите, чтобы она выглядела).

Если, с другой стороны, вы имели в виду параметры запроса, то это сработало бы:

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

Ответ 2

Вы можете кодировать параметры в URL таким образом:

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

Если это не соответствует вашим потребностям, вам лучше использовать форму, чем link_to.

Ответ 3

Для получения данных 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" )

Ответ 4

Параметры и метод http должны быть вместе {param1: 'value1', param2: 'value2', :method: :post}

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

Ответ 5

Обратите внимание, что если пользователь отключил JS или вы удалили ненавязчивые JS-библиотеки, которые приходят по умолчанию, link_to будет отправляться без запроса через запрос GET.

В общем, я не очень люблю ссылки, которые выполняют запросы POST. Я думаю, что роль формы и кнопки.

Таким образом, простой (и более безопасный) вариант заключается в использовании Rails button_to помощник:

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

button_to также поддерживает параметр method, но по умолчанию он равен POST, поэтому я просто опустил его.