Tenho um link com o qual preciso enviar uma solicitação de postagem. Normalmente, eu usaria jQuery e evitaria o comportamento padrão do link e, em seguida, enviaria um formulário para o destino. Isso parece algo com que Rails deveria ser capaz de me ajudar. Com certeza, o link_to
método tem uma opção para especificar um método POST http:
link_to "Profile", 'http://example.com/profile', method: :post
Isso funciona, mas preciso adicionar 2 parâmetros também. Eu tentei:
link_to "Profile", 'http://example.com/profile', method: post, param1: 'value1', param2: 'value2'
Isso apenas adicionou esses parâmetros ao <a>
elemento HTML, mas não os enviou ao clicar no link:
<a rel="nofollow" param1="value1" param2="value2" data-method="post" href="http://example.com/profile">Profile</a>
Existe uma maneira de fazer uma solicitação POST com parâmetros usando link_to
ou qualquer outro método Rails? Estou usando o Rails 3.2.9.
Respostas:
A resposta curta é que se o que você quer dizer com "parâmetros" são campos de formulário, então você simplesmente não pode fazer isso (pelo menos não de uma maneira direta que eu possa ver). Em vez disso, você deve usar um formulário com um botão de envio, estilizado para se parecer com um link (se é assim que você deseja).
Se, por outro lado, você quisesse dizer parâmetros de consulta , isso funcionaria:
link_to "Profile", profile_path(@profile.id, param1: 'value1', param2: 'value2'), method: :post
fonte
Você pode codificar parâmetros no URL desta maneira:
link_to "Profile", 'http://example.com/profile?' + {param1: 'value1', param2: 'value2'}.to_param, method: :post
Se não atender às suas necessidades, é melhor usar um formulário do que um
link_to
.fonte
?
perfil posterior.Observe que se o usuário desativou JS ou removeu as bibliotecas JS discretas que vêm por padrão,
link_to
serão enviadas silenciosamente por meio de umaGET
solicitação.Em geral, não gosto muito de ter links que realizam
POST
requisições. Acho que essa é a função de um formulário e um botão.Assim, uma alternativa fácil (e mais segura) é usar o helper button_to do Rails :
button_to 'Profile', profile_path(@profile, param1: 'value1', param2: 'value2')
button_to
também suporta amethod
opção, mas como o padrãopost
é, acabei de omiti-la.fonte
Para POSTAR dados, você precisa de um formulário. No entanto, você não precisa de um botão de envio. Se quiser que isso pareça um link por algum motivo, você pode realmente torná-lo um link que envia o formulário via JavaScript. No exemplo abaixo, o recurso POST é apenas uma ação REST que não requer nenhum campo, portanto, não há controles de entrada de formulário. Se você quiser postar alguns dados, basta colocar os campos de entrada ocultos no formulário.
<%= form_tag('http://something_postable', :method => :post, :class => 'internal') %></form> <%= link_to_function('Label for Link', 'previous("form").submit()', :title => 'Hover text for link') %>
O formulário é atribuído a uma classe para que você possa estilizá-lo ou ocultá-lo via CSS (por exemplo, 'display: inline')
fonte
Os parâmetros e o método http devem estar juntos
{param1: 'value1', param2: 'value2', :method: :post}
<%= link_to "Profile", profile_path(@profile), {param1: 'value1', param2: 'value2', method: :post} %>
fonte