2013-06-03 26 views
0

考慮下面的例子訪問內部負荷的資源/傾倒

module DataMapper 
    class Property 
    class CustomType < DataMapper::Property::Text 

     def load(value) 
     # do stuff and return formatted value 
     end 
    end 
    end 
end 

Class A 
    property :name, String 
    property :value, CustomType 
end 

現在,當我做A.firstA.first.valueload方法被執行,但我需要裏面load做的計算依賴於該實例的name屬性。那麼如何在加載方法中獲取此實例/資源的上下文(如源代碼中所提及的)?

如果問題尚不清楚,請讓我知道!

+0

你在'load'裏面實際做了什麼樣的「東西」? – toro2k

+0

https://github.com/datamapper/dm-core/issues/255 –

+0

而不是嘗試訪問load方法中的'name'屬性,您可能想要編輯'name'屬性的setter(在一個類),所以它有一個回調函數,用來設置'value'屬性。 – user1376019

回答

0

您試圖破解封裝。 namevalue是不同的屬性,因此每個人都應該不知道對方的存在,更不用說價值。

正確的解決方案是將「東西」移動到對兩個屬性都具有可見性的對象。這兩個選項是:

  1. A類(如user1376019所示);或
  2. 複雜的數據類型,例如, NameAndValue < DataMapper::Property::Object,它封裝了兩個屬性。

如果您需要對各個屬性執行聚合函數,第二個選項將不起作用,除非您可以以某種方式覆蓋複雜屬性以具有多個字段。

無論哪種情況,不能參考名稱沒有提及它。