У меня есть ссылка, по которой мне нужно отправить запрос на публикацию. Обычно я использую jQuery и предотвращаю поведение ссылки по умолчанию, а затем отправляю форму в пункт назначения. Похоже, что Rails сможет мне помочь. Конечно, у этого link_to
метода есть возможность указать HTTP-метод POST:
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>
Есть ли способ выполнить запрос POST с параметрами, используя link_to
или любой другой метод Rails? Я использую 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
я ее просто пропустил.источник
Чтобы отправить данные 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} %>
источник