mardi 20 décembre 2011

Rails 3.* : Routes avec un param automatique

En travaillant sur les urls d'une application Rails 3 et particulièrement sur les namespaces, j'avais besoin du côté de mes controllers d'un paramètre à exploiter.

Cependant ce paramètre devait être complètement transparent tant pour les controllers que les vues de l'application. En fait il devrait dépendre complètement de mes urls.

Ruby on Rails, en tant que framework nous offre de nombreux moyen.

Pour cet article, nous travaillerons exclusivement dans le fichier config/routes.rb

Prenons comme exemple le cas d'une application pour gérer mon magasin de vente d'articles divers.
Aussi, il me faut une interface pour gérer les stocks et une autre pour les commercialiser.

Donc dans mon application, je vais avoir de la sorte deux 'namespaces' : Stock et Vente qui se traduiront au niveau des url par /stock/articles et /vente/articles

Pour cela nous allons utilisé les namespaces ou scopes dans le routage de Rails :

namespace :stock do
resources :articles
end

namespace :vente do
resources :articles
end
Le problème de cette solution est que dans mes controllers, je ne sais pas aisément dans quel namespace je suis à moins de parser mon url.
D'autre part ce n'est pas très DRY.

Pour savoir systématiquement et aisément dans quel namespace je me trouve, 'stock' ou 'vente', le mieux est d'utiliser le hash params, bien connu quand on traite des données transmises par formulaire.

Nous utiliserons donc params[:namespace] que l'on retrouvera à chaque fois que nous aurons une url de la forme /stock/articles ou /vente/articles. Celui-ci aura la valeur 'stock' ou 'vente'. Rails offre deux possibilités. Celle que l'on trouve dans tous les guides utilise le scope :
scope ":namespace", :module => 'stock', :as => 'stock' do
resources :articles
end
Ainsi à chaque fois que l'on appelera l'url /stock/articles, on aura un params[:stock]='stock'. Les options :module et :as permettent d'avoir le même comportement qu'un namespace. Avec :module il ira chercher le controllers dans app/controllers/stock/articles_controller.rb. Et avec :as il créera les helpers stock_articles_path et stock_articles_url.

C'est vérifiable avec la commande rake routes.

Cela n'étant pas très élégant, on écrira ces routes avec namespace et lui définir un params par défaut qui existera systématiquement dans ce namespace.
namespace :stock, :namespace => :stock do
resources :articles
end
Et voilà avec 2 options en moins et une meilleure lisibilité de notre fichier de route, nous avons le même comportement.
Ensuite on fait la même chose sur 'vente' ou on boucle sur un Array [:stock, :vente].

Cette fonctionnalité ouvre de nombreuses portes.
En effet quelque soit le type de routes écrites avec 'match', 'get' et tout autre verbe RESTFul, on peut définir un params par défaut pour celle-ci en ajoutant
:nom_du_param => valeur_du_param.
Voilà pour la petite astuce, en espérant qu'elle soit utile au plus grand nombre.

jeudi 1 septembre 2011

Panne générale de mon site web

Je fais face à une grosse panne internet !
C'est la raison pour laquelle mon site web www.sebthemonster.homelinux.com est indisponible depuis 1 grosse semaine, et le sera encore jusqu'au 15 Septembre.

Je suis vraiment désolé.

Cependant rassurez-vous, si vous avez fait preuve de patience jusque là, endurez encore un peu, car les courses que vous avez manquées seront rattrapables dès le retour à la normale.

Merci à tous pour votre fidélité !

mardi 2 novembre 2010

Android 2.1 "Eclair" tethering sur Linux Ubuntu avec Proxoid

Me voilà passer sous Android, venu de l'iPhone... et comme sur l'iPhone... la première chose à faire, c'est l'utilisation de ces téléphones high-tech comme modem.

Après, on paye bien un forfait internet illimité (dans la limite du fairway évidemment :( )
Tout d'abord, je précise que je suis sous Ubuntu 10.10. Mais cela devrait fonctionner tout aussi bien sous Ubuntu 10.04.

Nous verrons ainsi comme installer le tethering sur le PC puis comment l'utiliser facilement.

Cette méthode est fonctionnelle pour Android 2.1 "Eclair". Pour Android 2.2 "Froyo", il n'est pas nécessaire d'en passer par là. Cela fera l'objet un autre article... promis ;)

samedi 31 juillet 2010

HOW TO installer XDTV sous Ubuntu ou Debian

J'ai utilisé ce logiciel pour regarder la télévision sur mon PC depuis mon arrivée dans le monde Linux.

Je n'ai jusqu'alors trouvé aucun logiciel qui soit aussi facile à utiliser et qui permette d'enregistrer aussi facilement et de programmer celui-ci.

Ce programme n'a jamais été dans les dépôts, pourtant il offrait sur son site (http://xawdecode.sourceforge.net/htmlpageFR/indexFR.shtml) un fichier deb.

Aussi à mon grand désespoir, lorsque j'ai installé Lucid Lynx (Ubuntu 10.04), j'ai appris que ce projet été abandonné... et donc plus de deb disponible.. :'(

Mais il serait en cours de reprise... extra. Cependant en attendant rien de plus depuis 2009 :(

J'ai persisté et finalement trouvé comment installer ce logiciel avec les sources.

jeudi 24 décembre 2009

Une GSXR qui se monte tout seule

Je ne suis pas pour les motos japonaises... difficile de ne pas le remarquer ;P

Mais cette vidéo est incroyablement bien faite et pleine d'humour... à voir et à revoir car il y plein de détails en arrière plan... je vous laisse les découvrir :



source: Youtube et article vu sur Moto-net.com