所以我知道如何使用轨道覆盖的关系(belongs_to的)默认的getter
def custom_getter
return self[:custom_getter] || some_default_value
end
我试图达到同样的事情,但是,对于一个属于覆盖默认的getter为一个ActiveRecord对象的属性协会。例如。
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
然而,这总会让一个数据库调用,即使酒吧已经被取出,这肯定是不理想的。
有没有人有一个洞察力,我可能有一个关系,这样的belongs_to属性只加载一次,并有一个默认值,如果没有设置。
你不必与一个循环?因为酒吧里的通话吧? – shingara 2010-03-23 14:50:58
不,你打电话给“酒吧”的新名称“original_bar”。 – 2010-03-23 15:08:28
工作就像一个魅力!非常感谢 – brad 2010-03-23 19:45:39