75 votes

Pages statiques en Ruby on Rails

Quelle est la manière standard de créer une application Ruby on Rails qui aura des pages telles que

  • Accueil
  • À propos de
  • Contact

J'apprécierais si quelqu'un avait des liens ou une réponse plutôt que de simplement dire d'utiliser une gemme parce que je veux apprendre comment faire des applications web simples avec un tel comportement.

112voto

Jeff Points 11642

Cela dépend de la façon dont vous voulez gérer le contenu de ces pages.

Approche n° 1 - stocker le contenu dans les vues

Si vous souhaitez simplement placer tout votre contenu dans des vues ERB, une approche très simple consiste à créer un fichier de type PagesController dont le but est de traiter les pages statiques. Chaque page est représentée par une action dans le contrôleur.

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'

Créez ensuite les vues home.html.erb, about.html.erb et contact.html.erb sous app/views/pages. Ces vues contiennent tout le contenu que vous voulez sur vos pages statiques. Elles utiliseront par défaut le layout application.html.erb de votre application.

Vous voudrez également vous pencher sur mise en cache des pages pour vous donner un coup de pouce dans la performance.


Approche n° 2 - stocker le contenu dans une base de données

Une autre approche que j'ai utilisée consiste à créer un CMS très basique pour les pages statiques. Dans ce cas, les pages sont représentées dans le modèle. Il utilise le gemme friendly_id pour gérer les slugs pour chaque page afin qu'ils puissent être récupérés par un joli nom dans l'URL (par exemple, /about) plutôt que par 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'

Note : mettez cette entrée à la fin de routes.rb car elle correspond à tout.

Vous pouvez disposer d'une interface d'administration ou l'intégrer à votre interface publique d'une manière ou d'une autre. Cette approche peut également bénéficier de la mise en cache des pages.

23voto

Max Masnick Points 1713

Une autre option est le high_voltage gemme : https://github.com/thoughtbot/high_voltage

Il est ainsi très facile de créer des pages statiques dont le contenu est stocké dans des vues.

6voto

traday Points 469

Consultez l'article de Michael Hartl http://railstutorial.org qui existe en version 2.3.8 et 3.0.x. Il couvre ce sujet à l'aide d'excellents exemples et vous aide à les construire très tôt. Vous aurez également l'occasion d'apprendre beaucoup plus que cet exemple. Je le recommande vivement.

6voto

timeon Points 452

L'approche n°1 de Jeff fonctionne très bien pour moi. Voici une astuce pour que le contrôleur recherche dynamiquement les pages. Avec cela, vous n'avez pas besoin de toucher au contrôleur ni à routes.rb pour ajouter des pages. Il suffit de déposer les pages dans app/views/pages et le contrôleur les trouvera.

class PagesController < ApplicationController
  def show
    render params[:id]
  end
end

1voto

Sumit Munot Points 1253

Pour en savoir plus, vous pouvez créer des pages statiques en utilisant Le bootstrap de Jekyll ou également Jekyll utilisant Danger blog

Le référer est très utile.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X