Surcharger les accesseurs par défaut dans les models de rails3

Il peut être intéressant de surcharger des accesseurs, par exemple changer le comportement d'un attribut et éviter de changer tout son code.

Voici un petit exemple :

class Product < ActiveRecord::Base
  # setter,  ici ce code ne sert à rien, car le comportement 
  # par défaut est conservé, mais c'est pour l'exemple
  def name=(name)
    write_attribute(:name, name)
  end
  # getter, ici on ajoute " qui poutre" lors le l'appel du
  # nom du produit
  def name
    return read_attribute(:name) + " qui poutre"
  end
end

Avant la surcharge :

p = Product.new(:name => "Banania en poudre")

p.name # retourne "Banania en poudre"

Après la surcharge :

p = Product.new(:name => "Banania en poudre")

p.name # retourne "Banania en poudre qui poutre"