Lors du test d'un getter/setter paire de rails de modèle, j'ai trouvé un bon exemple de comportement j'ai toujours pensé était bizarre et incohérent.
Dans cet exemple, je fais face à la class Folder < ActiveRecord::Base
.
Folder belongs_to :parent, :class_name => 'Folder'
Sur la méthode de lecture, si j'utilise:
def parent_name
parent.name
end
...ou...
def parent_name
self.parent.name
end
...le résultat est exactement le même, j'ai le nom du dossier parent. Cependant, dans la méthode de lecture si j'utilise...
def parent_name=(name)
parent = self.class.find_by_name(name)
end
... parent devient nul, mais si j'utilise...
def parent_name=(name)
self.parent = self.class.find_by_name(name)
end
...puis ensuite, il travaille.
Donc, ma question est, pourquoi avez-vous besoin de déclarer l'auto.méthode parfois et pourquoi ne peut-il vous suffit d'utiliser une variable locale?
Il semble que le besoin de / utilisation de l' self
dans ActiveRecord est incohérent, et j'aimerais comprendre mieux donc je n'ai pas l'impression que je suis toujours de savoir si je dois déclarer auto ou pas. Quand devriez-vous / devriez-vous pas utiliser soi dans ActiveRecord modèles?