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?

¿Fue útil?

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

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