2011-01-16 14 views
6

Estoy tratando de usar el button_to carriles de ayudante. Escribí el siguiente código:Button_to en Ruby on Rails ruta incorrecta

<%= button_to 'Edit Item', edit_item_path(@item), :class => 'mark-button' %>

y obtuve el siguiente mensaje de error

No route matches "/items/1/edit"

Pero cuando actualice la página que va a la acción apropiada. La URL de la página que recibo es localhost:3000/items/1/edit, que es la URL correcta. Si cambio el comando button_to al link_to, la página cargó sin errores. Es decir, este código:

<%= link_to 'Edit Item', edit_item_path(@item), :class => 'mark-button' %>

cargas bien. Tal vez hay alguna característica de button_to que no conozco, pero estoy perdida.

Respuesta

5

Creo que podría estar haciendo un mal uso de button_to. Siempre he pensado que si estás enlazando a la acción de edición, deberías estar usando link_to. Los botones parecen ser para acciones que necesitan publicar/poner datos, como actualizar un formulario o eliminar un registro.

Actualización:

Por defecto, button_to usos posteriores en lugar de GET. Por lo tanto, funciona cuando solo visitas la URL (es decir, GET).

+0

¿Cómo puedo anular esta función? – Nayish

+0

Si quiere que se vea como un botón, usaría link_to y usaría una clase de CSS que haría que su enlace pareciera un botón. Gran artículo aquí: http://www.smashingmagazine.com/2009/11/18/designing-css-buttons-techniques-and-resources/ – dontangg

+2

@nayish puedes establecer el método para obtener: 'button_to 'edit', edit_item_path (@item),: method =>: get' –

2

button_to está predeterminado a POST, y link_ a por defecto a GET.

Si realmente necesita button_to puede cambiar el método predeterminado a GET para editar y otros enlaces.

para excepto:

<%= button_to 'Edit', edit_user_path(@user), :method => :get %>