• 20 heures
  • Moyenne

Ce cours est visible gratuitement en ligne.

course.header.alt.is_video

course.header.alt.is_certifying

J'ai tout compris !

Mis à jour le 31/07/2020

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