2
假設我們有一個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