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 !