Blogue Web 2.0 Techniconseils

Recherche

Techniconseils sur Twitter

Archives

Catégories

Liens vers d'autres blogues

Accéder à une variable d’instance externe

Mercredi, le 19 novembre 2008 par Jonathan Grenier

Ruby on Rails se sert beaucoup des variables d’instances de Ruby (@variable) pour permettre aux Vues (View) et aux helpers d’accéder aux variables crées par les controlleurs. Ça fonctionne super bien jusqu’au moment où vous essayez de créer un helper FormBuilder. Pour ce faire, vous devez créer une nouvelle classe dérivant de ActionView::Helpers::FormBuilder. Comme votre helper est donc dans une autre classe, celui-ci n’à pas accès aux variables que vos controlleurs auraient pu créer. Dans mon cas, je tentais de créer un helper « label » bilingue. Celui-ci devait donc connaître la langue du visiteur et celle-ci est gardée en mémoire dans une variable d’instance @language. 

Comme c’est souvent le cas, Ruby à une belle façon de nous aider. Premièrement, allons voir la liste des méthodes que notre objet expose:

MyObject.public_methods

Avec la commande ci-dessus, on trouve que quelques méthodes intéressantes sont accessibles :

  • instance_variable_defined?
  • instance_variable_get
  • instance_variable_names
  • instance_variable_set
  • instance_variables

Nous pouvons donc dire MyObject.instance_variable_get(« @language ») pour avoir la valeur de la variable. Dans le cas d’un helper FormBuilder, ça fonctionne, mais encore faut-il savoir sur quel objet appeler la méthode. La réponse, dans ce cas, est l’objet @template qui est fourni par ActionView::Helpers::FormBuilder et qui représente l’objet « vue ». On peux donc faire:

template.instance_variable_get('@language')

On reparlera des FormBuilder très bientôt.

Enlever les accents d’un String Ruby

Mercredi, le 29 octobre 2008 par Jonathan Grenier

Ici chez Techniconseils, nous adorons Ruby on Rails pour plusieurs raisons, mais je pense qu’une de ces raisons est certainement la puissance et la flexibilité que le langage Ruby permet. Aujourd’hui, un problème est apparu pour la énième fois et j’ai finalement décidé de le régler.

Je devais convertir une chaine de caractères pour y enlever les accents et ne laisser que les lettres « de base ». Par exemple, je voulais que la chaine « été » devienne tout simplement « ete ». C’est pratique en autre pour transformer un titre en URL.

Le langage Ruby permet d’ajouter des méthodes et des attributs à une classe existante. Avec un petit script, j’ai donc pu ajouter 2 méthodes à la classe String. Si vous avez le même besoin, téléchargez la petite librairie (gratuite, offerte sous licence Creative Commons) et vous pourrez ensuite faire:

"été".removeaccents

Ou même:

"été".urlize

Cette dernière méthode appelle non seulement removeaccents, mais aussi quelques autres pour rendre la chaine prête à être utilisé dans une URL. La libraire est gratuite, alors téléchargez-la, utilisez-la, modifiez-la et envoyez-nous les modifications question que l’on puisse avec la meilleure version téléchargeable en tout temps.