Les petits bouts de code bogués dans les applications RubyOnRails 3

Voici quelques exemples de portion de code buggé :

1) Gestion des id et relations

Exemple de mauvais code :

family = Family.new(:name => "Bla")

product = Product.new(:family_id => family)

On a ici une confusion entre l'objet et l'id de l'objet, rails est magique mais pas tout le temps :

Soit on fait :

product = Product.new(:family_id => family.id)

Soit :

product = Product.new(:family => family)

Et non

product = Product.new(:family_id => family)


2) Utilisation de find_by_sql

Exemple de mauvais code :

families = Family.find_by_sql("SELECT * FROM families f JOIN products p ON p.family_id = f.id")

Family.find(families.first.id)

#Génére une erreur

Dans cet exemple de code, ActiveRecord ne sait pas quels ids mapper dans les objets family. Il se peut que ce soit les ids des produits qui sont dans les champs ids des objets ruby.

Pour ne pas avoir ce problème il ne faut retourner que les champs de l'objet :

families = Family.find_by_sql("SELECT f.* FROM families f JOIN products p ON p.family_id = f.id")

Le mapping est dans ce cas correct !

3) Sauvegarde en cascade :

# Ici on a family has_many products et product belongs_to family

p = Product.new(:name => "Produit1")

f = Family.new(:name => "Family1")

Ceci sauvegarde la famille en cascade :

p.family = f

p.save

#true

Ceci ne sauvegarde pas le produit en cascade :

f.products << p

f.save

#false

Si vous avez d'autres exemples laissez des commentaires !