Dans les views, j’ai spécifié la relation N-N :
Code :
class Projet < ActiveRecord::Base
has_and_belongs_to_many :especes
validation
validates_presence_of :nom
end
Code :
class Espece < ActiveRecord::Base
has_and_belongs_to_many :projets
validation
validates_presence_of :nom
end
Toutes les insertions, modifications se passent à merveille. C’est
dans la page show.html.erb que ça se gâte. La page show permet juste
l’affichage de l’occurence.
Comment fait-on pour afficher la liste des espèces du projet?
Voici l’extrait du code de la page show :
Code :
Récapitulatif du projet
<%= flash[:notice] %>
Nom
<%=h @projet.nom %>
Description
<%=h @projet.description %>
Espèces
<%=h @projet.especes %>
Actif
<% if @projet.actif %>
Oui
<% else %>
Non
<% end %>
Salut,
n’hésite pas à tester dans un script/console avant d’écrire ta vue.
Ton projet.especes retourne… un tableau. Donc tu peux tester la
présence d’éléments dans ce tableau, et itérer dessus de la même
manière que tu itères sur un résultat d’un .all dans une vue index.
En gros :
if projet.especes.present?
projet.especes.each do |espece|
espace.nom
(…)
normale tu lui demande de le faire
<%=h @projet.especes %> : la tu lui demande d’afficher un tableau (en
vrai
un proxy bref) d’espèce et il le fait.
si tu fais :
<% if !@projet.especes.blank? %>
<% for espece in @projet.especes %>
<%= espece.mon_champ_qui_vas_bien%>
<% end %>
<% end %>
Juste un hint en passant, parce que j’ai un peu galèré avec ça depuis
15 jours (ZSH n’était pas des plus parlants). Si jamais en lançant une
tâche rake, celle-ci plante avec le message :
Virtual timer expired rake …
Downgradez votre driver MySQL de 2.8.x à 2.7, ça devrait aider.