Pour commencer sachez que le langage de templates inclus par défaut dans Rails se nomme erb.
D'autres existent (Builder, HAML... et ont leur intérêt, mais je m'attarderais ici seulement sur erb).

Celui-ci vous permet d'intégrer du code Ruby dans votre code HTML comme vous le faites avec les balises <? et ?> de PHP.

En Ruby deux types de balises existent :

  • Le code placé entre <% et %> sera interprété, mais pas affiché.
  • Le code placé entre <%= et %> sera interprété et affiché.

On écrira par exemple pour afficher les informations d'un étudiant (méthode show)

[Ruby]
  

Présentation

Prénom: <%= h @student.firstname %>
Nom: <%= h @student.lastname %>
<% if @student.major? %> Age : <%= @student.age %> <% end %>

@student étant la variable passée par notre controller dans la méthode show dans la partie ActionController de ce tutoriel.

N.B. : Je n'ai pas écrit les méthodes major? et age dans mon modèle Student dans le tutoriel sur ActiveRecord mais l'intégralité de cette mini-application (absolument pas fonctionnelle) est disponible sur Github sur mon dépot.
Vous trouverez ce modèle ici

Vous vous souvenez que l'on avait également une méthode update, censée mettre à jour les données d'un utilisateur provenant d'un formulaire.

Écrivons ce formulaire :

[Ruby]
<% form_for @student do |s| %>

  <%= s.label :firstname, "Prénom" %>
<%= s.text_field :firstname %>
<%= s.label :lastname, "Nom" %>
<%= s.text_field :lastname %>
<%= s.label :date_of_birth, "Date de naissance" %>
<%= s.date_select :date_of_birth %>
<%= submit_tag "Enregistrer" %> <% end %>

Pas mal non :)

Oui ok un coup de CSS ne ferait pas de mal, mais là n'est pas le sujet

En passant le @student à la méthode form_for, celle-ci sait que le formulaire va modifier l'utilisateur existant et grâce à l'utilisation REST, elle peut aisément générer la balise formcorrespondante.

De même, l'utilisation du |s| permet d'appeler les méthodes de rails pour construire un formulaire ( text_field, date_select, hidden_field...) en les associant à notre étudiant et donc de générer le code du formulaire avec les propriété name des input correctement renseignées.

Regardez plutôt le code généré :

<form action="/students/1-Jonathan_Blanchet" class="edit_student" id="edit_student_1" method="post">
  <div style="margin:0;padding:0">
  <input name="_method" type="hidden" value="put" />
  <input name="authenticity_token" type="hidden" value="c810f8897fcc7bab36a440cb4653b4f87de89d6e" />
  </div>

  <label for="student_firstname">Prénom</label><br />
  <input id="student_firstname" name="student[firstname]" size="30" type="text" value="Jonathan" /><br />

  <label for="student_lastname">Nom</label><br />
  <input id="student_lastname" name="student[lastname]" size="30" type="text" value="Blanchet" /><br />
  ...
</form>

Les inputs _method et authenticity_token sont automatiquement renseignés par Rails.

Le premier informe Rails sur le type de requête a utiliser selon la méthode REST (ici PUT) en attendant que les navigateurs implémentent les méthodes PUT et DELETE (seulement GET ET POST sont actuellement supportées).

Le deuxième sert à protéger le formulaire contre des ataques extérieures mais comme le premier, vous n'aurez jamais à vous en soucier

Pour le reste, vous noterez la forme student[propriété] de tous les inputs qui nous permettra de récupérer un tableau student contenant tous les attributs de notre étudiant.

Vous noterez également que les propriétés value ont été automatiquement proprement remplies.

Voilà pour notre formulaire.


Vous vous souvenez surement que nos étudiants doivent avoir un nom et un prénom sous peine d'être "invalides" pour ActiveRecord.

Rajoutons en haut de notre page le code suivant :

[Ruby]
<%= error_messages_for 'student' %>

Si on essaye désormais de sauvegarder notre utilisateur sans nom, nous aurons droit à ceci :


Évidemment, tous ces messages sont personnalisables très facilement :)

Je ne vous parlerais pas ici d'AJAX car même si la facilité de mise en place de fonctionnalités AJAX avec Rails est souvent mise en avant dans les tutoriels, le code généré par Rails dans sa version actuelle n'est vraiment pas parfait et ne respecte pas le principe de séparation du contenu, de la présentation et du comportement (HTML - CSS - Javascript)

Pour les plus curieux, je vous invite à regarder du côté de UJS un plugin permettant d'écrire ce genre de choses :

[Ruby]
apply_behaviour '.list_item:click' do |page, element, event|
  element.replace_html "Deleted." 
  event.stop
end

Pour en savoir plus sur la notion de Progressive Enhancement (utilisation propre du Javascript) et sur les CSS-based Selectors, je vous invite à lire cette excellente présentation (c'est court mais excellent) :

Voilà, c'est terminé pour la partie vue et plus largement, pour cette série d'articles.

J'espère vous avoir convaincu de l'intérêt de Ruby et de Ruby On Rails pour écrire vos applications Web.

Pour ma part, je m'étonne encore régulièrement de la facilité à écrire certaines choses en Ruby ! [private joke]Même une mamie Molette blonde pourrait le faire...[/private joke].

Je vous invite maintenant à me laisser en commentaire, toutes vos questions, réflexions, demandes sur cette série d'articles et/ou sur Ruby/Ruby On Rails en général.
J'y répondrais avec plaisir et peut-être sous la forme d'une FAQ qui pourrait faire office de billet de clôture de cette série.