rails de défaut de priorité de lecture pour une relation (belongs_to)

Donc je sais comment remplacer la valeur par défaut des getters pour les attributs d'un ActiveRecord objet à l'aide de

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.

InformationsquelleAutor brad | 2010-03-23