¿Estás usando Rails 4? (Descúbrelo haciendo rails -ven tu consola)
Este problema probablemente se deba a la nueva gema Turbolinks . Hace que su aplicación se comporte como una aplicación JavaScript de una sola página. Tiene algunos beneficios ( es más rápido ), pero desafortunadamente rompe algunos eventos existentes como $(document).ready()porque la página nunca se vuelve a cargar. Eso explicaría por qué JavaScript funciona cuando carga directamente la URL, pero no cuando navega a través de un link_to.
Aquí hay un RailsCast sobre Turbolinks.
Hay un par de soluciones. Puede usar jquery.turbolinks como una solución inmediata , o puede cambiar su $(document).ready()declaración para usar en su lugar el 'page:change'evento Turbolinks :
$(document).on('page:change', function() {
});
Alternativamente, puede hacer algo como esto para la compatibilidad con cargas de páginas regulares, así como con Turbolinks:
var ready = function() {
};
$(document).ready(ready);
$(document).on('page:change', ready);
Si está usando Ruby on Rails> 5 (puede verificar ejecutando rails -ven la consola) use en 'turbolinks:load'lugar de'page:change'
$(document).on('turbolinks:load', ready);
'page:load'a enlazar para llamar$(document).ready(), por lo que haría todo normalmente.Tengo el mismo problema, pero jquery.turbolinks no ayudó. Noté que tengo que anular el método GET.
Ahí está mi muestra:
<%= link_to 'Edit', edit_interpreter_path(@interpreter), method: :get %>fuente
link_topero resulta que el problema real era una<script>etiqueta en línea en el pie de página. (Las etiquetas de secuencia de comandos en línea son malas con los enlaces turbo).Si está en los rieles 5 en lugar de
'page:change', debe usar'turbolinks:load'así:$(document).on('turbolinks:load', function() { // Should be called at each visit })Fuente: https://stackoverflow.com/a/36110790
fuente
También puede envolver su enlace con un div que especifique data-no-turbolink.
Ejemplo:
<div id="some-div" data-no-turbolink> <a href="/">Home (without Turbolinks)</a> </div>Fuente: https://github.com/rails/turbolinks
fuente
Asegúrese de no tener
<script>etiquetas en línea . (Las etiquetas de secuencia de comandos en línea son malas con los enlaces turbo).fuente
FWIW, de los documentos de Turbolinks , el evento más apropiado para capturar en lugar del
$(document).readyispage:change.page:loadtiene una advertencia de que no se activa en las recargas de caché ...Y dado que Turbolinks solo está cambiando la vista,
page:changees más apropiado.fuente
page:loadno me estaba funcionando en las actualizaciones; Recomiendo esta solución.La solución que resolvió mi problema fue agregar esta meta propiedad.
<meta name="turbolinks-visit-control" content="reload">Esto asegura que las visitas a una determinada página siempre activarán una recarga completa.
Esto fue increíblemente útil para trabajar en una solución para resolver el problema que tenía con esto, https://github.com/turbolinks/turbolinks#reloading-when-assets-change .
fuente