Pages courantes

De wiki.nexiat.fr
Aller à la navigation Aller à la recherche
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

Voir aussi