Итак, я знаю, как переопределить методы получения по умолчанию для атрибутов объекта ActiveRecord, используя
def custom_getter
return self[:custom_getter] || some_default_value
end
Я пытаюсь достичь того же, однако, для принадлежности к ассоциации. Например.
class Foo < AR
belongs_to :bar
def bar
return self[:bar] || Bar.last
end
end
class Bar < AR
has_one :foo
end
Когда я говорю:
f = Foo.last
Я бы хотел, чтобы метод f.bar
возвращал последний столбец, а не ноль, если эта связь еще не существует.
Однако это не работает. Причина в том, что self [: bar] всегда неопределено. Это на самом деле самостоятельно [: bar_id].
Я могу сделать что-то наивное, как:
def bar
if self[:bar_id]
return Bar.find(self[:bar_id])
else
return Bar.last
end
end
Однако, это всегда будет вызывать дб, даже если Bar уже получен, что, конечно, не идеально.
Есть ли у кого-нибудь понимание того, как у меня могут быть отношения, такие, что атрибут assign_to загружается только один раз и имеет значение по умолчанию, если не установлено.