tutorial rails que español ejemplos descargar curso ruby-on-rails ruby

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




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).