Donc, je sais comment faire pour remplacer la valeur par défaut des getters pour les attributs d'un objet à l'aide d'ActiveRecord
def custom_getter
return self[:custom_getter] || some_default_value
end
Je suis en train de réaliser la même chose mais pour un appartient à l'association. Par exemple.
class Foo < AR
belongs_to :bar
def bar
return self[:bar] || Bar.last
end
end
class Bar < AR
has_one :foo
end
Quand je dis:
f = Foo.last
J'aimerais avoir la méthode f.bar
de retour de la dernière Barre, plutôt que le néant si cette association n'existe pas encore.
Cela ne fonctionne pas, cependant. La raison en est que l'auto [bar] est toujours pas défini. C'est en fait l'auto[:bar_id].
Je peux faire quelque chose de naïf comme:
def bar
if self[:bar_id]
return Bar.find(self[:bar_id])
else
return Bar.last
end
end
Toutefois, cela fera toujours un db d'appel, même si la Barre a déjà été récupérés, ce qui n'est certainement pas idéal.
Quelqu'un aurait-il une idée de comment je pourrais avoir une relation telle que la belongs_to attribut n'est chargée qu'une seule fois et a une valeur par défaut si non définie.