访问加载/转储内的资源

时间:2013-06-03 11:36:47

标签: ruby ruby-datamapper

考虑以下示例

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.value load方法被执行时,我需要在load内执行的计算取决于该实例的{{1}属性。那么如何在load方法中获取此实例/资源的上下文(如源代码中所述)?

如果问题不明确,请告诉我!

1 个答案:

答案 0 :(得分:0)

您正试图打破封装。 namevalue是不同的属性,因此每个属性都应该忽略对方的存在,更不用说价值了。

正确的解决方案是将“stuff”移动到对两个属性都具有可见性的对象。这两个选项是:

  1. A类(由user1376019建议);或
  2. 复杂数据类型,例如NameAndValue < DataMapper::Property::Object,它封装了两个属性。
  3. 如果您需要对各个属性执行聚合函数,则第二个选项将不起作用,除非您可以以某种方式覆盖复杂属性以包含多个字段。

    在任何一种情况下, value 都不能引用 name 而不引用它。