模型的代理

模型的代理

问题描述:

假设我们有一个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' 

会打破它。现在我可以实施[]=,但这已经开始闻起来了。

有没有一些铁轨魔术我不知道这可能是有用的在这种情况下?

+0

删除我的回答 - 我认为这个问题属于下*不清楚你问*,除非你能拿出你试图解决实际问题的一个更具体的例子。 – max

+0

@max,尽管没有提到原始用例,但我认为这个问题不仅仅是明确的。代理/分派器,尽可能表现为持久属性。 – ndn

+0

难道你不能用'foo.bar ='baz''替换'foo ['bar'] ='baz''吗?我认为'foo ['bar'] ='baz''会直接跳到列,所以它会跳过setter :( – gabrielhilal

别名倾向于涵盖这种要求,但我不确定有条件别名。

看一看alias_attribute

+0

我试过'alias_attribute',但它似乎无法处理索引。它不适用于条件语句无论如何。 – ndn