Cómo hacer el contenido estático en Rails?
-
16-09-2019 - |
Pregunta
En cuanto a las diferentes opciones:
Una de ellas es que sólo hay que poner las páginas estáticas en el archivo / carpeta pública, pero deseo que la cabecera de diseño / aplicación sea consistente.
He intentado esto, pero me da 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 mi FAQ, contactos, tos, privacidad y otras páginas de tipo no-aplicación en algún lugar fácil por la creación de un .rhtml. quien ha hecho esto?
Solución
thoughtbot tiene un plugin llamado high_voltage para la visualización de contenido estático: https://github.com/thoughtbot/high_voltage
Otros consejos
Rails5 y Rails4 usted puede hacer lo siguiente:
Ponga la línea de abajo al final de su routes.rb
get ':action' => 'static#:action'
A continuación, pide a root / bienvenidos , hará que el /app/views/static/welcome.html.erb .
No se olvide de crear un controlador 'estático', a pesar de que usted no tiene que poner algo ahí.
Rails3 usted tiene que utilizar 'partido' en lugar de 'conseguir'
match ':action' => 'static#:action'
depende de la estructura de la URL, si desea que los caminos que salen de / (p / about_us), a continuación:
map.connect ':action', :controller => "static"
Esto debe ir al final de su archivo de rutas, Lance sus archivos .html.erb en app / views / estático y ya está.
por ejemplo:. Tirar about_us.html.erb
, le dará una página en / about_us
El artículo que usted tiene en su pregunta es ideal para pescar todo el recorrido donde se puede analizar la matriz se le entregó en params[:path]
. Un poco más información acerca de que al http://railscasts.com/episodes/46-catch- de todas las rutas
Rendering una acción no tiene sentido. Usted querrá hacer 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
Se puede servir a una variedad de diferentes plantillas a partir de una sola acción con el almacenamiento en caché de la 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, tendremos que definir una ruta.
# config/routes.rb
map.connect 'static/:path', :controller => 'static', :action => 'show'
Prueba a acceder a estas páginas estáticas. Si la ruta no incluye una plantilla válida, vamos a procesar el archivo 404 y devolver un estado 404.
-
http://localhost:3000/static/static1
-
http://localhost:3000/static/static3
-
http://localhost:3000/static/static2
Si se echa un vistazo en app / público se dará cuenta de un / directorio estático con static1.html, static2.html y static3.html. Después de acceder a la página por primera vez, todas las solicitudes posteriores serán totalmente estáticas gracias a la caché de páginas.
Teniendo en cuenta que si tienes 1 Inicio del controlador con el método pareja como espectáculo, aboutus, privacidad:
class HomesController < ApplicationController
def show
end
def privacy
end
def aboutus
end
end
Y un mapa de la demostración del método a su raíz, y el mapa de la otra para 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
Todo usando el mismo diseño en app / views / diseño / application.html.erb
Lindsaar solución es uno de los mejores que he visto. Él construir un almacenamiento en caché de páginas estáticas que expiraron cuando la revisión git cambió.
<%= cache "site-page-#{@page_name}-#{App.git_revision}" do %>
<%= render :partial => @page_name %>
<% end %>
Crear un PagesController para sus páginas estáticas (por ejemplo contacto) e insertar
def contact_page
end
en config / routes.rb insertar
get 'contact' => 'pages#contact_page'
que mostrará el contenido de la vista / pages / contact_page.html.erb