Pages courantes
| Fiche express | |
|---|---|
| Sujet | Pages statiques et dynamiques Rails |
| Pré-requis | Creation application |
| Framework | Rails |
| Voir aussi | Mise en page (Rails) |
Création de pages sous Rails. Pré-requis : voir Creation application. Deux approches : du HTML brut (fichiers statiques) ou des vues (views) contenant du HTML.
Pages statiques
Les pages purement statiques se placent dans public/ (ex. public/hello.html).
Génération d'un contrôleur de pages :
git checkout -b static-pages
rails generate controller Pages home contact
Fichiers préparés : config/routes.rb, app/controllers/pages_controller.rb, app/views/pages/home.html.erb. Ces vues peuvent ne contenir que du HTML statique.
Outils de test : voir Autotest rails.
Création manuelle d'une page dans un contrôleur
Référence dans le test du contrôleur :
# spec/controllers/pages_controller_spec.rb
describe PagesController do
render_views
describe "GET 'about'" do
it "devrait réussir" do
get 'about'
response.should be_success
end
end
end
Ajout de l'action, de la route et de la vue :
# app/controllers/pages_controller.rb
def about
end
# config/routes.rb
get "pages/about"
<!-- app/views/pages/about.html.erb -->
<h1>Pages#about</h1>
<p>Find me in app/views/pages/about.html.erb</p>
Pages dynamiques
Tester le titre de la page dans le spec du contrôleur :
describe "GET 'about'" do
it "devrait réussir" do
get 'about'
response.should be_success
end
it "devrait avoir le bon titre" do
get 'about'
response.should have_selector("title",
:content => "Simple App du Tutoriel Ruby on Rails | a Propos")
end
end
Optimisation avec les layouts
Plutôt que de répéter la structure HTML dans chaque page, on déclare une variable de titre dans le contrôleur et on factorise via le layout :
# app/controllers/pages_controller.rb
def about
@titre = "a Propos"
end
<!-- app/views/layouts/application.html.erb -->
<!DOCTYPE html>
<html>
<head>
<title>Simple App du Tutoriel Ruby on Rails | <%= @titre %></title>
<%= csrf_meta_tag %> <!-- module de sécurité -->
</head>
<body>
<%= yield %> <!-- rappel du contenu de la page -->
</body>
</html>
Sauvegarde et fusion Git
git add .
git commit -m "Fini avec les pages statiques"
git checkout master
git merge static-pages
rspec spec/
git push