Sunfox


Articles mot-clétés rails

Arel through examples

9 mars 2021 , , , ,

When a database query cannot be described using Ruby on Rails’ short ActiveRecord syntax, consider building your queries using Arel instead of going for raw SQL strings.

This has the following advantages:

  • Escaping by default: this helps not end up with SQL injections. We don’t like those.
  • Full names: using "users"."email" instead of email in your queries helps you be future-proof by making queries that won’t break when you merge queries together or add columns with conflicting names.
  • Composable: Arel expressions allows you to mix SQL commands as Ruby objects.
  • Uniform queries: it ensures that the generated SQL always looks the same. For example "users"."email" ASC instead of email asc. This makes it easier to search through logs and can help caching mechanisms.
Suite de l’article…

Traduire ses routes dans Rails

8 juillet 2015 1 commentaire, , , ,

Photo de portes de Fushimi Inari-taisha

Les URLs de votre site sont visibles et méritent autant d’attention que le reste de votre interface. Dans ce cas, pourquoi avoir des chemins en anglais uniquement alors que le reste de votre site est traduit ?

https://monsite.com/en/books/1/edit
https://monsite.com/fr/books/1/edit
https://monsite.com/es/books/1/edit

Je trouve que les adresses suivantes, traduites, sont plus élégantes et compréhensibles par tous :

https://monsite.com/en/books/1/edit
https://monsite.com/fr/livres/1/éditer
https://monsite.com/es/libros/1/editar

Mieux, non ?

Pour avoir des URLs pareilles avec Ruby on Rails sans pour autant tout dupliquer, j’ai développé la gemme route_localize.

Une fois installée, il suffit d’entourer les routes à traduire dans config/routes.rb :

scope localize: %w(en fr es) do
  resources :books
end

Vous pouvez ensuite traduire les chemins que vous voulez dans vos fichiers de localisation :

fr:
  routes:
    books: livres
    edit: éditer

Et voilà ! Magie !

Enfin, si vous souhaitez faire passer vos utilisateurs d’une langue à l’autre sur votre site un petit helper prends la langue voulue et vous retourne le chemin traduit.

Enregistrer la langue d’un compte utilisateur avec Devise

6 juillet 2015 , , , , , ,

Daim photographié

J’ai créé une petite gemme Ruby. Son petit nom c’est devise-track_locale. Si vous utilisez Ruby on Rails et Devise sur un site multilangue, cela vous permets d’enregistrer la dernière langue utilisée par l’utilisateur, automatiquement.

C’est un module Devise, donc son installation est aussi simple que d’ajouter :track_locale dans la liste de modules Devise et un champ locale sur les utilisateurs.

Ce n’est pas grand chose, mais plutôt que de garder cette fonctionnalité sur un site j’en ai fait une petite librairie externe, réutilisable, open-source, testée. Et je compte bien en faire autant pour tous ces petits développements qui sortent des fonctionnalités du cœur de mes sites.

Rails et Emails

4 septembre 2014 2 commentaires, , , , , , ,

parisrb

À la dernière conférence Paris.rb je présentais 6 choses à arrêter de faire si vous envoyez des emails avec votre application Ruby on Rails.

Suite de l’article…

Ajoutez la couleur dominante derrière vos images

25 juillet 2014 3 commentaires, , ,

Si vous pouvez extraire la couleur dominante d’une photo, vous pouvez améliorer la perception du chargement de votre site en vous servant de celle-ci tant que votre image n’est pas chargée.

Voici un exemple sur cults3d.com :

Chargement progressif d'une page Web où les couleurs de fond des images se chargent avant les images elle-même

HTML

En HTML, le plus simple est d’appliquer la couleur dominante sur son style inline. C’est cette couleur qui apparaîtra durant le chargement

<img style="background: #f3de56" src="…" width="120" height="120" />

Avec Rails

Si vous utilisez la librairie CarrierWave dans votre application Rails, vous pouvez extraire facilement la couleur dominante à chaque upload grâce à ma gemme ruby carrierwave-color.

Avec WordPress

Si vous utilisez WordPress, ajoutez l’extension dominant-color et ça sauvegardera la couleur dominante à chaque upload de medias. Vous pourrez même éditer la couleur choisie, directement dans l’administration.

EasouSpider le robot qui ne sait pas parler l’utf8

23 juillet 2014 , , , , ,

Photo de Mathieu mangeant une araignée

Ces derniers jours je recevait une trentaine d’emails par jour m’indiquant qu’une erreur avait éclatée sur cults3d.com. Ces exceptions provenaient toutes d’un robot chinois, EasouSpider, qui parcoure le Web pour remplir son moteur de recherche.

Ce robot ne sait pas parler l’unicode comme tout le monde et envoie dans les formulaires des valeurs mal encodées, ce qui fâche Ruby on Rails. Le problème est surtout que Rails ne traite l’erreur que bien trop tard, lorsqu’on essaie de lire les paramètres de la requête. Et là l’erreur est une incompréhensible ArgumentError :

invalid %-encoding (Q/B0*ÜHܘ0ÅÅ1 0 U GB1 0 U.…

Suite de l’article…

Retrouver les clefs de localisation facilement avec Rails

17 juillet 2014 3 commentaires, , ,

Photo de Drapeaux Lego

J’utilise Locale avec Ruby on Rails pour permettre à n’importe qui dans l’équipe de modifier les textes d’un site quelle que soit la langue.

Néanmoins, ce n’est pas évident pour celui qui n’a pas le code sous les yeux de retrouver quel texte correspond à quelle clef.

Suite de l’article…

ActionMailer n’aime pas vos URLs (par défaut)

14 juillet 2014 , , ,

Faire un lien dans un email dans une application Ruby on Rails devrait être aussi simple que de faire un lien dans le reste de l’application, non ?

Photo of a miniature train, by Sunny

Suite de l’article…

Erreurs 404 dynamiques dans Rails 3

14 novembre 2012 , , , ,

Utiliser un fichier statique public/404.html dans Rails est très vite limitant. Si on veut utiliser le layout normal de l’application, des informations dynamiques comme des menus, le nom de l’utilisateur courant ou un formulaire de recherche il faut rendre ces erreurs dynamiques.

Pour ça il faut intercepter deux erreurs qui produisent des 404 : les infos nos trouvées dans la base via ActiveRecord::RecordNotFound et les routes qui n’existent pas avec ActionController::RoutingError.
Suite de l’article…

RailsCamp Paris 2

8 mars 2009 1 commentaire, , , ,

Logo de RailsCamp Paris 2

L’année dernière j’inaugurais le premier Barcamp autour de Rails sur Paris. Cette année la deuxième édition du RailsCamp Paris a eu lieu ce samedi dans les locaux de Sun. Les locaux étaient magnifiques et les salles de conférences avaient la bonne taille pour ces petites présentations d’une heure.

Dans cette édition moins de course entre chaque conférence et plus de discussions de couloirs extrêmement intéressantes. Différence dans les discussions par rapport à l’année dernière : github est beaucoup plus cité, louangé et rares sont ceux qui ne s’en servent pas aujourd’hui :)

La communauté Rails se porte bien, ça ne manque pas d’offres d’emploi et malgré que les inscriptions aient atteint les 100 participants assez rapidement on rencontre malgré tout de nouvelles têtes.

Je repars avec de bonnes listes de plugins, des bonnes idées de trucs à faire avec CouchDB, des promesses de fork et une folle envie de me replonger dans du Ruby :)

Merci à l’association Ruby France et aux nombreux sponsors de faire vivre cet événement (et de nous fournir en montagnes de pizzas !).

Rails Party, Paris On Rails 2008 et Apéro Ruby

3 décembre 2008 3 commentaires, , ,

Compte-rendu de trois rencontres autour de Ruby et Rails.

Rails Party, pour les geeks

Les conférenciers de la Rails Party on eut entre 40 et 5 minutes pour nous parler de : RSpec, bonnes pratiques Active Record, Facebooker, indexation de bases de données avec Sphinx, Lazy pagination, YAPS, migration vers Rails 2.2, i18n dans Rails 2.2, déploiement d’une très grosse appli Rails et desktop. Ces conférences était extrêmement intéressantes et n’avaient rien à envier aux conférences payantes du lendemain ! Domamge qu’il ait fallu parfois tendre l’oreille vers deux bonnes présentations en même temps.

Chapeau bas à Jean-François et au reste de l’équipe de Ruby France d’avoir organisé cette rencontre un brin informelle et surtout gratuite en si peu de temps.

Paris On Rails, pour les décideurs

[Logo Paris On Rails]

DHH, le créateur de Rails a répondu à nos questions depuis Chicago. Il est bon de le voir s’emporter (il a dit bullshit, je suis témoin !) quand on lui a posé une question sur Merb. Pour ma part j’ai été plus politiquement correct, je lui ait demandé quel t-shirt il portait :]

Michael Koziarksi membre de l’équipe de développement de Rails, nous faisait une conférence sur les performances de Rails. Extrêmement instructif mais en anglais avec un accent néerlandais débité à une vitesse folle. Je relirais ses diaporamas avec grand intérêt.

Don’t be a Ruby developer

J’ai particulièrement apprécié la vidéo-conférence de Russ Olsen, l’auteur du livre Design Patterns in Ruby pour ces anecdotes sur les tous premiers pots en terre glaise décorés comme des paniers, sur son fils de 8 ans et lorsqu’il rappelait à quel point il ne fallait jamais s’arrêter sur une technologie et toujours voir de l’avant. Si j’aime la communauté Ruby c’est aussi parce qu’on y parle beaucoup d’Erlang, Smalltalk, io et autres langages.

Mathieu Fosse nous vantant les mérites de la librairie JavaScript Mootools et Didier Lafforgue de Liquid, un moteur de rendu de pages bien trop complexe. Mais aucun des deux n’a réussi à me convaincre d’utiliser leur techno.

Guillaume Desrat a fait une très chouette présentation avec les nouveautés de Ruby 1.9, (avec un interpréteur 4.5 × plus rapide que Ruby 1.8 !) qui donne envie d’y passer.

Les tests, c’est bien

On retrouvait Jean-Michel Garnier pour nous parler des tests d’interface Web qu’il n’aimait pas faire l’année dernière. Ces tests d’interfaces d’exemples étaient assez simples pour que ça me convainque d’en faire, au moins un minimum. Merci Jean-Michel d’être passé me dire bonjour :). Philippe Hanrigou, ensuite, présentait les tests d’acceptation en distribuant les tests avec Selenium Grid. On en retiens que les tests c’est bien mais que c’est long et qu’il faut bien se garder d’avouer qu’on en fait pas…

Apéro Ruby, pour les piliers de bar

C’était l’occasion de se détendre, de manger une soupe à l’oignon et de continuer de très intéressantes discussions autour de Ruby, en petit comité, avec des habitués de Ruby France.


Merci aux organisateurs, sponsors et à Julie et ma boîte Cosmic Communication de m’avoir offert la journée pour aller aux conférences payantes de Paris On Rails. C’est à ça qu’on reconnaît les entreprises dans lesquelles on aime bosser :)

Party!

28 novembre 2008 1 commentaire, , ,

Ce week-end sur Paris je serais à l’Ubuntu Party et à la Rails Party. Les deux événements sont des conférences totalement gratuites, un brin geek, bon enfant, organisées et animées par des passionnés.

Que vous vouliez discuter Ubuntu et logiciels libres, faire vos premiers pas sous Linux ou troller allègrement passez-donc Samedi et Dimanche à l’intrépide Ubuntu Ibex Party, à la Cité des Sciences et de l’Industrie. Cette Édition promet d’être grandiose avec conférences, démonstrations, et débats mais avec en plus un stand, des animations et ateliers Mozilla.

Logo Ruby France Et si vous voulez parler Ruby, Rails, développement agile, MVC ou bien également troller allègrement, passez-donc Dimanche à la Rails Party. À la veille de Paris on Rails 2008, au bar Dune et organisée par Jean-François de Ruby France, le programme est prometteur avec Hackfest, conférences et Lightning Talks de gens très bien  (dont trois anciens étudiants de l’INSIA !).

RailsCamp Paris

18 mai 2008 3 commentaires, , , , , ,

Les petites conférences de RailsCampParis sont terminées. Première fois que j’assistais à des conférences de type BarCamp et j’ai adoré à la fois l’ambiance, l’ouverture et la proximité des intervenants. Bref compte-rendu des conférences auxquelles j’ai pu assister.

Sébastien Gruhier nous a donné une excellente démonstration d’intégration de Google Maps dans une application Rails d’exemple. Les cartes s’intègrent extrêmement facilement avec un peu de JavaScript (alors qu’à Paris On Rails 2006, Sébastien nous ventait les mérites de RJS ! ;)) et grâce au plugin geokit. Ce dernier est impressionnant, une fois ajouté acts_as_mappable à un modèle, il permet d’excellentes manipulations, tel que :

origin = MultiGeocoder.geocode('8 rue Boucry, Paris, France')
User.find :all, :origin => origin, :order => 'distance'

Ceci retourne la liste des utilisateurs triés par distance par rapport à chez moi. La requête SQL générée automatiquement a une fière allure :

SELECT *, (ACOS(least(1,COS(0.853356449908079)*COS(0.0412320771281345)
*COS(RADIANS(users.lat))*COS(RADIANS(users.lng))+COS(0.853356449908079)
*SIN(0.0412320771281345)*COS(RADIANS(users.lat))*SIN(RADIANS(users.lng))
+SIN(0.853356449908079)*SIN(RADIANS(users.lat))))*3963.19)
AS distance FROM `users` ORDER BY distance

Pour continuer sur le JavaScript, Samuel Lebeau nous a parlé d’event delegation et des façons qui se développent en ce moment pour créer une syntaxe proche de CSS qui permettrait d’appliquer des comportements JavaScript. Les prototype-fruits sont à suivre…


Moi et mes tags

C’est ensuite à Stéphane Akkaoui de nous expliquer comment créer une application Facebook avec Rails. Je ne m’attendais pas à ce que cela soit aussi simple ! Du coup j’ai très envie de faire une petite application Facebook en utilisant le plugin Facebooker… même si Facebook c’est le mal.

La conférence de Jordan Bracco sur Mongrel vs Thin vs Ebb vs FastCGI était intéressante malgré le fait qu’un souci de MacBook lui ait fait perdre toutes ses slides. Tout ça à cause d’un Dark Vador avec un sombrero ;). De bonnes questions et un sujet qui bouge beaucoup. Pour preuve, c’est le tout récent Ebb qui sort grand vainqueur du benchmark fait pour l’occasion.

J’ai beaucoup apprécié toutes ces conférences à taille humaine et je regrette d’avoir dû choisir entre plusieurs conférences tant les sujets étaient intéressants. Merci aux organisateurs, aux sponsors, aux bonbons, aux boissons, aux pizzas, à la Cantine, aux conférenciers et à tous ceux avec qui j’ai pu échanger quelques mots lors de cette journée.

Grand merci (en retard) à l’association Ruby France ! Vivement RailsCamp 2009.

Paris On Rails 2007

11 décembre 2007 4 commentaires, ,

Un an après Paris On Rails 2006, on ne présentait plus le framework web révolutionnaire lors de l’édition 2007 de Paris On Rails. Le mot d’ordre de la journée était cette fois « les entreprises sont prêtes ! ».

[Logo Paris On Rails]
Paris on Coke

L’ouverture de conférence de Richard Piacentini nous rappelait justement la fulgurante montée de Rails et du langage Ruby. Les immenses entreprises (Microsoft, Sun, …) l’utilisent et d’autres grosses entreprises nous rapportent leurs retours d’expérience : Wifirst représentée par Aurélien Géron et RBC Dexia Investor Services représentée par Sylvain Perez et Guillaume Desrat. Enfin, JRuby, présenté par Alexis Moussine-Pouchkine, semble être là pour séduire les plus frileuses des entreprises françaises.

Laurent Julliard nous fait à nouveau découvrir le langage cette année en y ajoutant les grands principes de Rails : Don’t Repeat Yourself, Convention Over Configuration, Say What You Do, Do What You Say, One Language To Rule Them All, Model-View-Controller, Structure, Tests. Après Ruby et Java le langage le plus cité de la journée est SmallTalk, d’où viennent beaucoup de bonnes idées.

Yann Lugrin nous offre un tour complet de l’internationalisation d’applications web et spécifiquement d’application Rails dans une conférence très complète où il y avait beaucoup à retenir. La conférence suivante de Nicolas Mérouze était une autre agréable surprise de la journée avec une conférence qui m’a drôlement donné envie d’utitiliser HAML et SASS, les générateurs respectivement d’HTML et de CSS qui poutrent.

Impossible à retenir mais c’était un pur bonheur à suivre

Et là c’est le clou du spectacle, Christophe Porteneuve. Oui je sais j’ai dit la même chose l’année dernière. Il a même cité mes louanges dans ses slides. Mais ce qui a plu dans la conférence précédente était de nouveau là pour sa conférence sur quelques particularités et nouveautés de Prototype et Scriptaculous. Encore plus speed que l’année dernière et toujours aussi technique. Ceux qui ne connaissaient pas le personnage étaient bluffés bien qu’il annonçait la couleur dès le départ. Voici une citation que tu peux utiliser pour l’année prochaine Christophe : Il a encore tout déchiré sa race.

David Heinemeier Hansson était là, grandiose, avec son joli t-shirt de licorne, en vidéo live de Chicago pour nous parler de son dernier bébé Rails 2.0 et répondre à nos questions.

Jean-Michel Garnier nous a présenté les tests dans Rails et plus particulièrement en utilisant RSpec : des tests courts, agréables à lire, tournés autour des spécifications et qui fournissent une documentation. Encore une conférence qui donnait envie de se plonger plus loin encore dans une techno !

Ravi d’avoir pu discuter avec Tslh et AlSquire, cela faisait un moment que je devais les croiser ceux-là. Enfin, merci aux organisateurs et aux conférenciers pour cette journée aux conférences d’une grande qualité et à Cosmic de m’avoir libéré la journée pour y aller.

👨🏻‍🦰 Sunny Ripert

est un développeur web vivant à ParisContactArchives

Textes et contenus sous licence Creative Commons.