【发布时间】:2011-01-30 20:12:40
【问题描述】:
所以我知道如何使用
覆盖 ActiveRecord 对象的属性的默认 getterdef 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 方法返回最后一个 Bar,而不是 nil。
但这不起作用。原因是 self[:bar] 总是未定义的。实际上是 self[:bar_id]。
我可以做一些幼稚的事情,比如:
def bar
if self[:bar_id]
return Bar.find(self[:bar_id])
else
return Bar.last
end
end
然而,这总是会进行 db 调用,即使 Bar 已经被获取,这当然不理想。
有没有人了解我如何建立这样的关系,即 belongs_to 属性只加载一次,如果未设置则具有默认值。
【问题讨论】:
标签: ruby-on-rails activerecord associations default-value