ruby-on-rails - pagina - ruby on rails tutorial
¿Cómo hacer contenido estático en Rails? (7)
Cree un PagesController para sus páginas estáticas (por ejemplo, contacto) e inserte
def contact_page
end
en la inserción de config / routes.rb
get ''contact'' => ''pages#contact_page''
que mostrará el contenido de views / pages / contact_page.html.erb
Mirando diferentes opciones:
Una es simplemente colocar las páginas estáticas en la carpeta pública /, pero sí quiero que el encabezado del diseño / aplicación sea consistente.
Intenté esto, pero recibí un error:
# in routes.rb:
map.connect ''*path'', :controller => ''content'', :action => ''show''
# in content_controller.rb:
def show
render :action => params[:path].join(''/'')
end
Todo lo que quiero es una manera fácil de armar cosas como mis preguntas frecuentes, contactos, tos, privacidad y otras páginas que no sean de aplicación en algún lugar fácil simplemente creando un archivo .rhtml. quien ha hecho esto?
Para Rails5 y Rails4 puedes hacer lo siguiente:
Ponga la línea debajo al final de sus rutas.rb
get '':action'' => ''static#:action''
Luego las solicitudes para rootear / dar la bienvenida , representarán /app/views/static/welcome.html.erb .
No olvides crear un controlador "estático", aunque no tengas que poner nada allí.
Para Rails3 debes usar ''match'' en lugar de ''get''
match '':action'' => ''static#:action''
Prestar una acción no tiene sentido. Querrá renderizar una plantilla (o un archivo) con un diseño.
# Path relative to app/views with controller''s layout
render :template => params[:path]
# ... OR
# Absolute path. You need to be explicit about rendering with a layout
render :file => params[:path], :layout => true
Puede servir una variedad de plantillas diferentes de una sola acción con el almacenamiento en caché de página.
# app/controllers/static_controller.rb
class StaticController < ApplicationController
layout ''static''
caches_page :show
def show
valid = %w(static1 static2 static3)
if valid.include?(params[:path])
render :template => File.join(''static'', params[:path])
else
render :file => File.join(Rails.root, ''public'', ''404.html''),
:status => 404
end
end
end
Por último, necesitaremos definir una ruta.
# config/routes.rb
map.connect ''static/:path'', :controller => ''static'', :action => ''show''
Intente acceder a estas páginas estáticas. Si la ruta no incluye una plantilla válida, presentaremos el archivo 404 y obtendremos un estado 404.
-
http://localhost:3000/static/static1
-
http://localhost:3000/static/static3
-
http://localhost:3000/static/static2
Si echas un vistazo a la aplicación / público, verás un directorio / estático con static1.html, static2.html y static3.html. Después de acceder a la página por primera vez, las solicitudes posteriores serán totalmente estáticas gracias al almacenamiento en caché de la página.
Ten en cuenta si tienes 1 Home Controller con el método couple como show, aboutus, privacy:
class HomesController < ApplicationController
def show
end
def privacy
end
def aboutus
end
end
Y asigna el método de mostrar a tu raíz y asigna el otro a algunas rutas con nombre como
map.root :controller => "homes", :action => "show"
map.aboutus "/aboutus", :controller => "homes", :action => "aboutus"
map.privacy "/privacy", :controller => "homes", :action => "privacy"
Y con vista para cada
app/views/homes/aboutus.html.erb --> you get http://localhost:3000/aboutus
app/views/homes/show.html.erb --> you get http://localhost:3000 (root)
app/views/homes/privacy.html.erb --> you get http://localhost:3000/privacy
Todos usan el mismo diseño en app / views / layout / application.html.erb
depende de la estructura de la url, si quieres que las rutas salgan de / (ej. / about_us), entonces:
map.connect '':action'', :controller => "static"
Esto debe ir al final de su archivo de rutas. Tirar sus archivos .html.erb a la aplicación / views / static y listo.
Por ejemplo, al lanzar about_us.html.erb
, obtendrá una página en / about_us.
El ítem que tienes en tu pregunta es ideal para una ruta de catch all donde puedes analizar la matriz que se te da en params[:path]
. Un poco más de información sobre eso en http://railscasts.com/episodes/46-catch-all-route
thinkbot tiene un complemento llamado high_voltage para mostrar contenido estático: https://github.com/thoughtbot/high_voltage