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_tomé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_too 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: :postfuente
Puede codificar parámetros en la URL de esta manera:
link_to "Profile", 'http://example.com/profile?' + {param1: 'value1', param2: 'value2'}.to_param, method: :postSi 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_toenviarán silenciosamente a través de unGETsolicitud.En general, no me gusta mucho tener enlaces que funcionen
POSTsolicitudes. 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_totambién es compatible con lamethodopció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