1

私は DataMapper を始めたばかりで、この種のことを頻繁に行っていることに気付きました。

class MyModel
  include DataMapper::Resource

  property :id, Serial
  property :serialized_credentials, String

  def credentials
    @credentials ||= YAML.load(self.serialized_credentials)
  end

  def credentials=(c)
    @credentials = nil
    self.serialized_credentials = YAML.dump(c)
  end

end

これにより、資格情報のハッシュ (たとえば) を渡すことができます。

しかし、DataMapper はすでにこのメカニズムを提供していますか?

4

2 に答える 2

2

ObjectDataMapperが提供するタイプを使用できます。

class MyModel
  include DataMapper::Resource

  property :id, Serial
  property :credentials, Object
end

ただし、これはMarshal.dumpの代わりに使用YAML.dumpしますが、独自のタイプを定義することでこれを乾かすことができます。

class YAMLObject < DataMapper::Type
  primitive String

  def self.dump(value, property)
    Base64.encode64(YAML.dump(value))
  end

  def self.load(value, property)
    value.nil? ? nil : YAML.load(Base64.decode64(value))
  end
end

その後、他のタイプと同じように使用できます。

class MyModel
  include DataMapper::Resource

  property :id, Serial
  property :credentials, YAMLObject
end

最後になりましたが、 MultiJsonを使用してデータをダンプおよびロードするgemJsonから利用可能なタイプがあります。dm-types

参照(オブジェクトタイプ):

参照(独自のタイプを定義):

参照(Jsonタイプ):

于 2013-02-19T19:29:11.330 に答える