Pregunta Páginas estáticas en Ruby on Rails


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


75
2017-12-18 17:41


origen


Respuestas:


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ás investigar almacenamiento en caché de página para darse 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 el friendly_id joya para manejar babosas para cada página para que puedan recuperarse con un bonito nombre en la URL (por ejemplo, / sobre) en lugar de mediante 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.


112
2017-12-18 17:50



Otra opción es la high_voltage joya: 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.


24
2017-11-10 22:27



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 el controller macro en tus 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 usa el get método del verbo http en lugar de match, que es una mejor práctica para las rutas de Rails (y más conciso, ahora que Rails 4 requiere que se especifique el verbo http cuando se usa match.


14
2018-06-27 03:52



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

6
2018-03-15 00:25



Echa un vistazo a Michael Hartl http://railstutorial.org 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.


6
2017-12-18 20:39



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


2
2017-08-08 23:04



Para más, puede crear páginas estáticas usando Jekyll bootstrap o también Jekyll usando el blog Danger

Remítalo es muy útil.


1
2017-10-22 10:08



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 mágico de acción / plantilla MVC, etc.


0
2017-12-18 18:03



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.


0
2017-07-16 07:29