así que sé cómo reemplazar los captadores por defecto para los atributos de un objeto ActiveRecord utilizandorieles prevalece sobre captador por defecto para una relación (belongs_to)
def custom_getter
return self[:custom_getter] || some_default_value
end
que estoy tratando de lograr lo mismo sin embargo, para una pertenece a asociación. Por ejemplo.
class Foo < AR
belongs_to :bar
def bar
return self[:bar] || Bar.last
end
end
class Bar < AR
has_one :foo
end
cuando digo:
f = Foo.last
me gustaría tener el método f.bar
devolver el último bar, en vez de nil si esa asociación no existe todavía.
Esto no funciona, sin embargo. La razón es que self [: bar] siempre está indefinido. En realidad es self [: bar_id].
puedo hacer algo ingenua como:
def bar
if self[:bar_id]
return Bar.find(self[:bar_id])
else
return Bar.last
end
end
Sin embargo, esto siempre va a hacer una llamada db, aunque bar ya ha sido exagerado, que por cierto no es lo ideal.
¿Alguien tiene una idea de cómo podría tener una relación tal que el atributo belongs_to solo se carga una vez y tiene un valor predeterminado si no se establece?
Usted no tiene un bucle con eso? porque la barra de llamadas en la barra? – shingara
No, usted llama "original_bar" que es el nuevo nombre de "barra". –
funcionó como un encanto! Muchas gracias – brad