Tengo un enlace con el que necesito enviar una solicitud de publicación. Normalmente, usaría jQuery y evitaría el comportamiento predeterminado del enlace y luego enviaría un formulario al destino. Esto parece algo en lo que Rails debería poder ayudarme. Efectivamente, el link_to
método tiene una opción para especificar un método http POST:
link_to "Profile", 'http://example.com/profile', method: :post
Eso funciona, pero también necesito agregar 2 parámetros. Lo intenté:
link_to "Profile", 'http://example.com/profile', method: post, param1: 'value1', param2: 'value2'
Eso solo agregó esos parámetros al <a>
elemento HTML, pero no los envió al hacer clic en el enlace:
<a rel="nofollow" param1="value1" param2="value2" data-method="post" href="http://example.com/profile">Profile</a>
¿Hay alguna forma de hacer una solicitud POST con parámetros usando link_to
o cualquier otro método Rails? Estoy usando Rails 3.2.9.
Respuestas:
La respuesta corta es que si lo que quiere decir con "parámetros" son campos de formulario, entonces simplemente no puede hacer esto (al menos no de una manera sencilla que yo pueda ver). En su lugar, debe usar un formulario con un botón de envío, diseñado para que parezca un enlace (si así es como desea que se vea).
Si, por otro lado, se hubiera referido a parámetros de consulta , esto funcionaría:
link_to "Profile", profile_path(@profile.id, param1: 'value1', param2: 'value2'), method: :post
fuente
Puede codificar parámetros en la URL de esta manera:
link_to "Profile", 'http://example.com/profile?' + {param1: 'value1', param2: 'value2'}.to_param, method: :post
Si no se ajusta a sus necesidades, es mejor que utilice un formulario que un
link_to
.fuente
?
perfil posterior.Tenga en cuenta que si el usuario tiene JS deshabilitado o ha eliminado las bibliotecas JS discretas que vienen por defecto, se
link_to
enviarán silenciosamente a través de unGET
solicitud.En general, no me gusta mucho tener enlaces que funcionen
POST
solicitudes. Creo que ese es el papel de una forma y un botón.Por lo tanto, una alternativa fácil (y más segura) es usar Rails button_to helper:
button_to 'Profile', profile_path(@profile, param1: 'value1', param2: 'value2')
button_to
también es compatible con lamethod
opción, pero como está predeterminadapost
, la he omitido.fuente
Para POSTAR datos, necesita un formulario. Sin embargo, no necesita un botón de envío. Si desea que se vea como un enlace por alguna razón, puede convertirlo en un enlace que envíe el formulario a través de JavaScript. En el siguiente ejemplo, el recurso POST es solo una acción REST que no requiere ningún campo, por lo que no hay controles de entrada de formulario. Si desea publicar algunos datos, simplemente coloque campos de entrada ocultos en el formulario.
<%= form_tag('http://something_postable', :method => :post, :class => 'internal') %></form> <%= link_to_function('Label for Link', 'previous("form").submit()', :title => 'Hover text for link') %>
Al formulario se le asigna una clase para que pueda diseñarlo u ocultarlo a través de CSS (por ejemplo, 'display: inline')
fuente
Los parámetros y el método http deben estar juntos
{param1: 'value1', param2: 'value2', :method: :post}
<%= link_to "Profile", profile_path(@profile), {param1: 'value1', param2: 'value2', method: :post} %>
fuente