2011-06-06 10 views
17

Deseo hacer una redirección a index.html en mi aplicación/carpeta pública.¿Cómo puedo redirigir a root - public/index.html?

def get_current_user 
    @current_user = current_user 
    if @current_user.nil? 
     redirect_to root_path 
    end 
end 

¿Cómo puedo lograr esto?

no he modificado la raíz en mi routes.rb (Su todavía comentado)

# root :to => "welcome#index" 

me sale un error diciendo root_path no está definido.

¿Cómo modifico routes.rb para que root_path apunte a public/index.html?

+4

En lugar de usar 'root_path', use' redirect_to '/' ' – meagar

+0

@meagar Es una respuesta, no un comentario, entonces ¿por qué no solo crea su respuesta en lugar de comentar la pregunta? – MBO

+1

@MBO No es una respuesta. La pregunta era "¿Cómo hago X?" y mi comentario fue "No, haz Y en su lugar". Esta no es una respuesta aceptable a la OMI, y rechazaría a otros por publicarla como tal. – meagar

Respuesta

5

Lo que quiere hacer no es compatible con Rieles.

Rails es MVC, C para el controlador, V para ver.

Por lo tanto, su interior necesita ambos.

Ok, public/index.html se muestra de manera predeterminada, pero es solo porque el proceso está anulado.

Entonces, podría crear un controlador static con una acción index y su vista correspondiente (simplemente copie/pegue el contenido de su archivo actual public/index.html).

asentando después:

root :to => "static#index" 

Y por favor, elimine el archivo public/index.html :)

+7

Rails admite la publicación de contenido estático del directorio 'public'. Esto es completamente "Compatible con rieles". – meagar

+3

@apneadiving Rails viene con un 'public/index.html' estático fuera de la caja para cada nuevo proyecto, y funciona bastante bien.También podría decirle que ** debe ** tocar la base de datos o que no está usando la 'M' en 'MVC'. – meagar

+7

También "Rails es MVC, C para el controlador, V para la vista. Por lo tanto, su interior necesita ambos" es completamente falso. Cada vez que haces un 'redirect_to' no estás usando la" V "en MVC. – meagar

19

Puede asignar una ruta llamada a un archivo estático que pasa por cualquier cadena no vacía como :controller y el camino hacia el archivo como el :action de la ruta:

Application.routes.draw do 

    root :controller => 'static', :action => '/' 
    # or 
    # root :controller => 'static', :action => '/public/index.html' 

end 

# elsewhere 

redirect_to root_path # redirect to/

Asumiendo que tiene un public/index.html, esto es lo que será ser ved.

+0

haciendo esto también significa que la vista servida no tiene nada que ver con las otras vistas en la aplicación, lo cual es realmente improbable. Las vistas tienen un diseño común, esa es la belleza de Rails DRYness. – apneadiving

+7

@apneadiving Hacer esto implica mucho más que la falta de un diseño compartido, pero no hay nada de malo en eso. Si tiene la intención de publicar un archivo de índice estático, es de suponer que ha decidido que * no * hay un diseño común, y no hay absolutamente ninguna razón para no publicar 'index.html' de esta manera. – meagar

+1

@meagar Totally. En realidad, IMO es una opción entre _disposición dividida_ (MVC) y _respuesta rápida_ (archivos estáticos). Rails es compatible con ambos, la belleza de la flexibilidad de Rails. (En caso de MVC, aún puedo usar el CSS para mantener una apariencia un tanto compartida). –

3

archivo de ruta:

 root 'main#index' 

controlador:

 class MainController < ApplicationController 
     def index 
     redirect_to '/index.html' 
     end 
    end 

y utilizando carriles 4 acción del controlador vivir esta puede comportarse como una única solicitud de página utilizando el M & C con un giro en el V

+0

En realidad, ni siquiera necesita definir la acción 'def index'. Solo definir el controlador y el archivo de índice es suficiente. Los rieles omitirán la acción en la ruta, si no se encuentra. – LessQuesar

6

en el controlador

redirect_to root_path (will redirect to root '/') 
Cuestiones relacionadas