• 20 heures
  • Moyenne

Ce cours est visible gratuitement en ligne.

Ce cours est en vidéo.

Vous pouvez obtenir un certificat de réussite à l'issue de ce cours.

J'ai tout compris !

Mis à jour le 23/10/2018

Mise en pratique

Connectez-vous ou inscrivez-vous gratuitement pour bénéficier de toutes les fonctionnalités de ce cours !

Le chapitre précédent explique comment lier des modèles entre eux. L’objectif de celui-ci est d’utiliser cette nouvelle connaissance sur votre site. Ajoutez la possibilité de choisir la catégorie d’un livre lors de sa création :

# app/views/books/index.html.erb
<%= form_tag '/books', method: 'post' do %>
  <input type="text" name="title" />
  <input type="text" name="category_id" />
  <input type="submit" value="Ajouter le livre" />
<% end %>
# app/controllers/books_controller.rb
def create
  Book.create title: params[:title], category_id: params[:category_id]
  redirect_to "/books"
end

Tout ce que nous avons fait, c’est d’ajouter un champ de formulaire « category_id » et de le prendre en compte dans la fonction de création du contrôleur. Ce n’est pas très élégant : cela nécessite de connaître les identifiants par coeur ! C’est là que les <select> sont utiles :

# app/controllers/books_controller.rb
def index
  @books = Book.all
  @categories = Category.all
end
# app/views/books/index.html.erb
<%= form_tag '/books', method: 'post' do %>
  <input type="text" name="title" />
  <select name="category_id">
    <% @categories.each do |category| %>
      <option value="<%= category.id %>"><%= category.name %></option>
    <% end %>
  </select>
  <input type="submit" value="Ajouter le livre" />
<% end %>

Nous avons utilisé une boucle sur l’ensemble des catégories pour générer toutes les balises <option> nécessaires : leur value correspond à l’identifiant de la catégorie, mais c’est son nom qui est affiché à l’utilisateur. Testez votre code !

Il n’est alors guère difficile d’afficher la catégorie de chaque livre :

# app/views/books/index.html.erb
<h1>Liste des livres</h1>
<% @books.each do |book| %>
  <p>
    <a href="/books/<%= book.id %>">
      <% if book.category %>
        <%= book.title %> (<%= book.category.name %>)
      <% else %>
        <%= book.title %>
      <% end %>
    </a>
  </p>
<% end %>

N’oubliez pas de vérifier que la catégorie est bien présente - ce qui est fait ici avec le if -, sans quoi book.category.name provoquerait une erreur si aucune catégorie n’a été renseignée pour un livre !

Exemple de certificat de réussite
Exemple de certificat de réussite