模型的代理
问题描述:
假设我们有一个foos
表,列bar
。现在我们将该列重命名为bar_primary
并添加另一个 - bar_secondary
。我们想要将bar
的读/写行为分配给这两个属性中的某些属性。模型的代理
我希望是这样的:
class Foo < ActiveRecord::Base
def bar
read_condition ? bar_primary : bar_secondary
end
def bar=(value)
if write_condition
self.bar_primary = value
else
self.bar_secondary = value
end
end
end
会做的伎俩,不过是这样的:
foo['bar'] = 'baz'
会打破它。现在我可以实施[]=
,但这已经开始闻起来了。
有没有一些铁轨魔术我不知道这可能是有用的在这种情况下?
删除我的回答 - 我认为这个问题属于下*不清楚你问*,除非你能拿出你试图解决实际问题的一个更具体的例子。 – max
@max,尽管没有提到原始用例,但我认为这个问题不仅仅是明确的。代理/分派器,尽可能表现为持久属性。 – ndn
难道你不能用'foo.bar ='baz''替换'foo ['bar'] ='baz''吗?我认为'foo ['bar'] ='baz''会直接跳到列,所以它会跳过setter :( – gabrielhilal