(Ruby, Rails, Javascript) ¿Redirigir / renderizar una página diferente cuando Javascript está deshabilitado ...?

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

Pregunta

Tengo problemas graves con Rails, Javascript y redirecciones. Básicamente tengo el "simple" problema de redirigir a una página diferente si JS está deshabilitado. Si JS está habilitado, entonces agrego un nuevo elemento en línea de inmediato, esto funciona de maravilla. Sin embargo, si JS está desactivado, quiero redirigir a la NUEVA página de un controlador diferente. Básicamente, la configuración del modelo es la siguiente:

Site -> Buildings -> Controllers (not to be confused with Rails "controllers")

Tengo un " SiteManagerController " que usa JS para administrar todo. Básicamente tengo un escenario en el que trato de hacer lo siguiente:

1) si JS está habilitado, quiero agregar el elemento en línea 2) si JS está deshabilitado, deseo representar ": controller = > edificios,: action = > nuevo "

Mi " link_to_remote " Es sencillo. Como dije, funciona para JS. Mi código de controlador de rieles es el siguiente:

def add_building     @building = Building.new     @ building.name = " Sin título "     @ building.site_id = params [: id]     @ building.save     responder_hacer | formato |       format.html {redirect_to: controller = > " edificios " ;,: action = > " nuevo "}       format.js     final   fin

Esto no funciona. Por lo que vale, al ver la fuente de la página no hay indicios de que algo sea diferente cuando JS está habilitado vs deshabilitado. Todos los enlaces tienen el mismo aspecto, es decir, Ajaxy.

Sé que no debería ser un problema tan complejo, pero estoy bastante perplejo.

Mejor.

P.S. Por favor, no cambie el título de esta publicación. ;)

¿Fue útil?

Solución

La solución de link_to_remote mencionada probablemente funcionaría, pero si está buscando una forma discreta de hacerlo, utiliza algunos javascript (jQuery) como este:

en su archivo .html.erb:

<%=link_to "New Building", new_building_path, :id => 'new_building_link' %>

en un archivo javascript:

$(document).load(function() {
  $("#new_building_link").click(function() {
    $.ajax({
      type:     "POST",  # or whatever http method you need
      url:      "/buildings/add_building",
      dataType: "script"
    });
    return false;
  });
});

Luego devuelva algunos JS que actualizarán el área de la página que desea cambiar.

Estoy seguro de que hay una forma similar de hacerlo con Prototype, la biblioteca JS predeterminada para rieles, pero no conozco Prototype.

También tenga en cuenta que esto utiliza rutas relajantes (new_building_path en lugar de especificar el controlador y la acción). Este es el método preferido ahora; solo necesita agregar 'map.resources: buildings' a routes.rb. Hay un par de Railscasts sobre rutas relajantes, y si tiene $ 9 para soltar, un Peepcode.

Como uno de los comentarios mencionados, puede reducir su código de creación de Edificio usando:      Building.create ({: name = > " Sin título " ;,: site_id = > params [: id]})

Otros consejos

Creo que la solución se encuentra en el enlace "a_remoto" y no cualquier controlador en particular. Lo siguiente parece funcionar:

        <div><%=link_to_remote "NEW BUILDING", {:url => {:action => "add_building", :id => site.id}},
            {:href => url_for(:controller => "buildings",:action => "new")}%></div>

Si ustedes tienen mejores sugerencias, por supuesto publiquen. Gracias de nuevo.

¿Has intentado escribir el formulario para que se redirija a otra página y luego se apaguen algunos js cuando se carga la página que sobrescribe eso con tus ajax-y js? De esta manera, si js está deshabilitado, la página se redirigirá como se esperaba.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top