A moitié entre le pragmatique et le ninja ?
Analyse de mes tics en développement avec le billet de miximum.

  • OS : Windows. Mais je réflechit à m’acheter un mac (peut-être l’été prochain).
  • Editeur : Aptana
  • Langage favori : aucun. Mais j’affectionne particulièrement Ruby, Python et PHP.
  • VCS : Subversion
  • Navigateur : Firefox

Je me considère entre le pragmatique et le ninja parce que j’ai beaucoup tendance à être comme ce second. Mais pas de manière aussi extrème que ce qui est dit dans cet article. Je suis donc à moitié entre les deux (avec une tendance à pencher vers le ninja).

Qui a dit que je faisait encore un billet avec un titre trop « complexe » ?

Il peut arriver que vous ayez besoin, dans un même formulaire, d’ajouter plusieurs uplets en même temps.
L’exemple le plus flagrant est dans le cas d’option.

Dans le screenshot ci-dessus par exemple, le lien « ajouter une option » exécute une fonction javascript qui ajoute trois champs permettant de remplir une option supplémentaire.
De même le bouton supprimer enlève l’option juste au dessus.

Ignorons le manque de design.

Afin d’avoir quelque chose de propre, nous pouvons utiliser l’attribut index. Ainsi, pour un champ de texte de base, nous pouvons allons avoir :

<%= f.text_field :modele, :champ, :index => identifiant %>

Ou identifiant est un nombre unique qui caractérise l’entrée.
En ajoutant cela à tous vos champs, ceux-ci ressembleront à cela :

<input id="modele_1_champ" name="modele[1][champ]" size="30" type="text" />

Dans votre contrôleur, vous n’aurez alors plus qu’à faire quelque chose comme :
params[:modele].each do |modele|
@modele = Modele.new(modele)
@modele.save()
end

C’est cool, ça fonctionne :-)
Cependant c’est tout pas beau car on répète inutilement un identifiant à chaque fois.
Et c’est la que fields_for fait son apparition.
Remplaçons le code précédent :

<% fields_for :modele, variable, :index => identifiant do |f| %>
<%= f.text_field :name %>
<% end %>

Ou variable est une variable qui contiendra la à attribuer à chacun de nos champs, obtenue par :
variable = Modele.find(:all)

Nous définissons une boucle permettant de déclarer de multiples champs avec un index et ce sans répéter celui-ci :-)

Note : un bug qui a été corrigé en juin 2008 apporte un bug avec les listes de sélection, ne leur déclarant pas d’identifiant.
Pour le corriger, il faut remplacer le fichier (sous Windows) <emplacement vers Aptana>/org.jruby_1.1.0.5965_RC2p2/lib/ruby/gems/1.8/gems/actionpack-2.1.0/lib/action_view\helpers par celui-ci.

Il y a un truc super bien avec ruby, c’est les gem !
En gros, le fonctionnement est similaire à aptitude de debian. Diverses fonctions (install, update, uninstall) permettent d’installer de multiples paquets permettant d’installer les diverses extensions de ruby et rails.
Ces extensions sont multiples. Du support de divers serveurs de bases de données à la récupération des données exif d’une photo.

En mode console, c’est très simple ! Pour installer un gem, il suffit de faire :

gem install nom-du-gem

Mais dans un environnement de développement avec Aptana/Radrails, installer un gem de cette manière ne l’installera pas dans l’application. Il faut donc « bidouiller » un peu.
Allez donc dans le menu « Window » > « Show view » > « Other ». La fenêtre suivante s’affiche

Sélectionnez le menu « Ruby » puis « RubyGems » (comme c’est fait ici quoi). Puis valider.
La, un nouvel onglet va s’ouvrir normalement en bas de votre fenêtre aptana. Mais cela peut dépendre de votre configuration.

Ce nouvel onglet vous fournit la liste de tous les gems déjà installés.
A droite sont situés de multiples boutons permettant de recharger la liste, d’en installer de nouveaux, d’en supprimer ou de mettre à jour tous vos gems.

Cliquez sur celui le plus à droite (le « + » vert) pour en installer un autre. La, la liste s’affiche. Il ne vous reste plus qu’à choisir celui qui vous ferait plaisir, à cliquer sur « OK » et attendre un petit peu pour que l’installation se fasse.
Aptana peut parfois être long pour lancer ce genre de processus. Il me faut attendre environ 20 à 30 secondes avant que celle-ci ne commence.
Par ailleurs une fois que l’installation est faite, il semble qu’il faille redémarrer le serveur pour que le nouveau gem soit pris en compte.

Après avoir installé tous les gem qui nous intéressent, le prochain article concernera l’utilisation du gem « exifr », permettant de récupérer les informations exif d’une image locale.

 
Fork me on GitHub