Cómo Rails 3 decide qué verbo HTTP se utilizará cuando se hace clic en un enlace generada por “link_to”?

StackOverflow https://stackoverflow.com/questions/4449040

Pregunta

Tengo dos enlaces:

<%= link_to("Edit", edit_product_path(product.id)) %>
<%= link_to("Delete", product, :method => :delete) %>

Los enlaces generados son:

<a href="/products/81/edit">Edit</a>
<a href="/products/81" data-method="delete" rel="nofollow">Delete</a>

Al hacer clic tanto en Edit y en Delete, se utiliza el método GET.

¿Cómo rieles decidido qué método usar?

¿Qué data-method="delete" y rel="nofollow" media en el enlace Delete?

¿Fue útil?

Solución

Los navegadores suelen apoyar los métodos GET y POST HTTP. Para poner emular y verbos eliminar, rieles inyecta un parámetro _method especial cuando se envía un formulario.

especifica el método que desea utilizar pasando la opción :method, como lo hizo.

<%= link_to("Action with DELETE", path_to_something, :method => :delete) %>
<%= link_to("Action with PUT", path_to_something, :method => :put) %>

A menos que se especifique, el valor por defecto es GET.

A partir de los carriles 3, rieles utiliza discreta JavaScript para manejar el método Delete. Se pasa el HTTP verbo en el atributo data-method, que es un HTML 5 característica .

En su caso, no lo hace el trabajo, ya que probablemente se olvidó de incluir una biblioteca de JavaScript (por ejemplo prototipo o jQuery) y el adaptador de rieles.

Asegúrese de que está utilizando ya sea jQuery o Prototype, y se está incluyendo el archivo rails.js Javascript. Además, no se olvide de añadir el csrf_meta_tag.

<%= csrf_meta_tag %>

Si quieres aprender movimiento, que escribió un artículo sobre JavaScript no obstructivo en Rails 3 hace unos meses.

Otros consejos

Interesante. Puedo confirmar que link_to con el ": method =>: Borrar" funciona en el andamio por defecto. Sin embargo, en el intento de construir un proyecto sin andamios, no puedo llegar a link_to trabajo. button_to obras sin ningún problema, utilizando los mismos parámetros que fracasaron con link_to.

En mi etiqueta HEAD que han requerido el javascript incluye:

javascript_include_tag :defaults
csrf_meta_tag

muy confuso. Yo no podía entender por qué "secreta" salsa pone en juego andamios para hacer link_to trabajo. Mientras que la afirmación de que Rob link_to borrado no está disponible en Rails 3, puede no ser técnicamente precisa, lo encontré prácticamente exacta. Gracias Rob, había sido atrapado por horas hasta que vi tu post.

No se puede utilizar un enlace para una eliminación en los carriles 3 Es necesario utilizar un button_to por ejemplo.

<%= button_to("Delete", product, :method => :delete) %>
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top