Retour au sommaire du support de cours

(Dernière modification : 2014/08/07)

Les Vues sont généralement générées dans Ruby On Rails avec des fichiers de template.
Cependant pour générer une page Web, il ne faut pas forcément passer par un fichier de template.
Les Templates sont les fichiers chargés pour produire le code HTML, XML ou autre, renvoyés au navigateur pour une Vue donnée.

Cliquez sur la table des matières pour la cacher / développer :

1) Génération des Vues :

La génération de la page pour une vue se fait avec les méthodes : respond_to ou render.

ATTENTION :
Utiliser la méthode render dans un contrôleur avec le paramètre :action est une source fréquente de confusion pour les débutants Rails.
L'action spécifiée est utilisée pour déterminer quelle vue générer, mais Rails n'exécute aucun code du contrôleur pour cette action.
Chaque variable d'instance dont vous avez besoin dans la vue, doit-être initialisée dans l'action courante, avant d'appeler render.
Par contre, l'usage de la méthode redirect_to garantit que l'action du contrôleur va être exécutée.

 

2) Langages utilisés dans les Templates :

2.1) Types de templates :

2.2) Embedded Ruby :

Un template Erb contient des blocs de code Ruby insérés dans du code HTML.
Un fichier de template peut être testé :
erb -vd <nom_template>.html.erb

2.3) Templates partials (fragments) :

Rails rends disponible une variable counter dans une fragment appellé par une collection. Cette variable commence par le nom du membre de la collection suivi de '_counter'.
Par exemple, si vous générez @produits, à l'intérieur du fragment vous pouvez utiliser produit_counter pour savoir combien de fois le fragment a été exécuté.
Cela ne marche bien sûr pas en conjonction avec l'option :as => :value.

2.4) Templates de séparation :

Avec l'instruction :
<%= render @produits, :spacer_template => "produit_ruler" %>
Rails générera le template fragment _produit_ruler (sans lui passer aucune donnée) entre chaque paire de fragment _produit.

2.5) Chemins de recherche des vues :

Le répertoire app/views et le répertoire par défaut de recherche des vues.
Chaque plugin / gem fournissant un engine ajoute au chemin de recherche son répertoire des vues.
Pour voir la liste des chemins de recherche :
ActionController::Base.view_paths

 

3) Accès aux assistants(helpers) des vues :

3.1) dans les Vues

Utilisation de ActionController::Base.helpers :
class Produit < ActiveRecord::Base
	def helpers
		ActionController::Base.helpers
	end

	# models/category.rb
	def description
		"Cette catégorie as #{helpers.pluralize(products.count, 'produit')}."
	end
end

3.2) dans les Contrôleurs

Utilisation de la variable @template pour Rails 2,
Et view_context pour Rails 3 :
flash[:notice] = "Création #{view_context.link_to('product', @product)} avec succès."

 

4) Helpers (Assistants) des vues

4.1) Formulaires

Les formulaires sont générés avec des assistants.
On accède à ces assistants avec l'instruction form_for.
Cette méthode renvoie un objet de type : ActionView::Helpers::FormBuilder

Exemple :
<% form_for(@categorie) do |f| %>
  <%= f.error_messages %>

  <p>
    <%= f.label :nom %><br />
    <%= f.text_field :nom %>
  </p>
  <p>
    <%= f.label :description %><br />
    <%= f.text_area :description %>
  </p>
  <p>
    <%= f.submit 'Update' %>
  </p>
<% end %>
Cet objet est lié au modèle courant, on peut retrouver ce modèle avec l'instruction :
f.object

4.2) Timezones

Dans config/environment.rb :
config.time_zone = 'Paris'
Dans la vue pour sélectionner une TZ pour l'utilisateur :
<%= time_zone_select 'user', 'time_zone', TZInfo::Timezone.all.sort, :model => TZInfo::Timezone %>

4.3) Champs date

  • 1 année
  • 2 mois
  • 3 jour du mois
  • 4 heure
  • 5 minute
  • 6 seconde
Ex :
date_livraison(<n>i)