que - Páginas estáticas en Ruby on Rails
ruby on rails tutorial español (9)
Consulte el http://railstutorial.org de Michael Hartl, que viene en una versión 2.3.8 y 3.0.x. Cubre esto con excelentes ejemplos y lo guiará a través de la construcción desde el principio y también tendrá la oportunidad de aprender mucho más que este ejemplo. Lo recomiendo altamente.
¿Cuál es la forma estándar de hacer una aplicación de Ruby on Rails que tendrá páginas como
- Casa
- Acerca de
- Contacto
Apuntaría si alguien tiene enlaces o respuestas en lugar de solo decir que utilizo una gema porque quiero aprender cómo hacer simples aplicaciones de Internet con dicho comportamiento.
Depende de cómo quiera manejar el contenido en esas páginas.
Enfoque n.º 1: almacenar contenido en vistas
Si solo quiere poner todo su contenido en vistas de ERB, entonces un enfoque muy simple es crear un PagesController
cuyo propósito es tratar con páginas estáticas. Cada página está representada por una acción en el controlador.
pages_controller.rb:
class PagesController < ApplicationController
def home
end
def about
end
def contact
end
end
routes.rb:
match ''/home'' => ''pages#home''
match ''/about'' => ''pages#about''
match ''/contact'' => ''pages#contact''
A continuación, cree las vistas home.html.erb, about.html.erb y contact.html.erb en la aplicación / vistas / páginas. Estas vistas contienen el contenido que desee en sus páginas estáticas. Usarán de forma predeterminada el diseño application.html.erb de su aplicación.
También querrá examinar el almacenamiento en caché de la página para obtener un impulso en el rendimiento.
Enfoque n. ° 2: almacenar contenido en la base de datos
Otro enfoque que he usado es hacer un CMS muy básico para páginas estáticas. En este caso, las páginas están representadas en el modelo. Utiliza la gema friendly_id para manejar las babosas de cada página para que puedan ser recuperadas por un nombre bonito en la URL (por ejemplo, / sobre) en lugar de por ID.
page.rb:
class Page < ActiveRecord::Base
attr_accessible :title, :content
validates_presence_of :title, :content
has_friendly_id :title, :use_slug => true, :approximate_ascii => true
end
pages_controller.rb:
class PagesController < ApplicationController
def show
@page = Page.find(params[:id])
render ''shared/404'', :status => 404 if @page.nil?
end
end
show.html.erb:
<%= raw @page.content %>
routes.rb:
match ''/:id'' => ''pages#show''
Nota: ponga esta entrada al final de routes.rb ya que coincide con todo.
Entonces, cómo desea crear, editar y actualizar las páginas depende de usted; puede tener una interfaz de administrador o compilarla en su interfaz pública de alguna manera. Este enfoque también puede beneficiarse del almacenamiento en caché de la página.
El enfoque # 1 de Jeff (almacenar contenido en vistas y tener una ruta y acción de controlador para cada página estática) es bueno. Lo único que agregaría es usar la macro del controller
en sus rutas.
Entonces, en lugar de esto:
match ''/home'' => ''pages#home''
match ''/about'' => ''pages#about''
match ''/contact'' => ''pages#contact''
Puedes hacerlo:
controller :pages do
get :home
get :about
get :contact
end
Son dos líneas adicionales, pero mucho más elegantes, ya que elimina la repetición y agrupa visualmente las rutas de páginas estáticas.
También utiliza el método get
http verb en lugar de match
, que es una práctica mejor para las rutas de Rails (y más conciso, ahora que Rails 4 requiere que se especifique el verbo http cuando se usa match
.
El enfoque n.º 1 de Jeff funciona muy bien para mí. Aquí hay un truco para hacer que el controlador busque dinámicamente las páginas. Con esto, no necesita tocar el controlador ni el routes.rb para agregar páginas. Simplemente coloque las páginas debajo de la aplicación / vistas / páginas y el controlador lo encontrará.
class PagesController < ApplicationController
def show
render params[:id]
end
end
Otra opción es la gema high_voltage
: https://github.com/thoughtbot/high_voltage
Esto hace que sea muy fácil crear páginas estáticas donde el contenido se almacena en vistas.
Para obtener más información, puede crear páginas estáticas usando Jekyll bootstrap o también Jekyll usando el blog de Danger.
Remítalo es muy útil.
Sugiero que agregue sus páginas en la carpeta pública para que se sirvan directamente sin tener que pasar por los rieles. Aunque no soy un experto, no estoy seguro de si esto podría tener inconvenientes si la página es estática.
Una respuesta adecuada a su pregunta sería básicamente una introducción al marco de trabajo de Rails: la estructura MVC, la creación de plantillas y el enrutamiento DSL al menos. Jeff ha dado una buena puñalada, pero su respuesta todavía asume una gran cantidad de conocimiento básico de Rails de tu parte.
Sin embargo, sugeriría que, si tu aplicación web es así de simple, Rails podría ser excesivo. Buscaría algo más ligero, como Sinatra , que tiene una curva de aprendizaje mucho más baja que Rails y hace un gran trabajo de este tipo sin tener que lidiar con enrutamiento complejo, mapeo MVC de acción / plantilla mágico, etc.
config / routes.rb
get '':id'', to: ''pages#show''
app / controllers / pages_controller.rb
class PagesController < ApplicationController
def show
begin
render params[:id]
rescue ActionView::MissingTemplate
render :file => "#{Rails.root}/public/404", :layout => false, :status => :not_found
end
end
end
A continuación, coloque sus páginas estáticas en la aplicación / views / pages / {name} .html.erb (o en cualquier formato de plantilla).