tutorial software rubyonrails rails index home generate and ruby-on-rails ruby-on-rails-3 post ruby-on-rails-3.2 link-to

ruby on rails - software - Usando Rails link_to para los enlaces que publican



rubyonrails download (5)

La respuesta corta es que si lo que quiere decir con "parámetros" es campos de formulario, entonces simplemente no puede hacer esto (al menos no de una manera directa 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í lo desea que se vea).

Si, por otro lado, hubieras querido decir parámetros de consulta , entonces esto funcionaría:

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

Tengo un enlace con el que debo enviar una solicitud posterior. Normalmente, usaría jQuery y evitaría el comportamiento predeterminado del enlace y luego enviaría un formulario al destino. Esto parece algo con lo que Rails debería poder ayudarme. Efectivamente, el método link_to 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 acaba de agregar esos parámetros al elemento <a> 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.


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} %>


Para poder POSTAR datos, necesita un formulario. Sin embargo, no necesita un botón de envío. Si desea que parezca un enlace por algún motivo, puede convertirlo en un enlace que envíe el formulario a través de JavaScript. En el ejemplo siguiente, 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 los 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 darle estilo u ocultarlo a través de CSS (por ejemplo, ''display: inline'')


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 usar un formulario que un link_to .


Tenga en cuenta que si el usuario tiene JS deshabilitado o si ha eliminado las discretas bibliotecas JS que vienen de manera predeterminada, link_to enviará silenciosamente a través de una solicitud GET .

En general, no me gusta mucho tener enlaces que realicen solicitudes POST . Creo que esa es la función de una forma y un botón.

Por lo tanto, una alternativa fácil (y más segura) es usar el button_to helper:

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

button_to también admite la opción de method , pero como está predeterminada para post así que simplemente lo he omitido.