可表示的gem:处理嵌套文档(散列)的麻烦

时间:2015-10-07 18:02:35

标签: ruby-on-rails ruby gem mapping representable

我使用了Representable gem并遵循readme中的说明来访问嵌套文档中的属性。

代表和测试:

# app/representers/nhl/game_representer.rb

require 'representable/hash'

module Nhl::GameRepresenter
  include Representable::Hash
  include Representable::Hash::AllowSymbols

  property :stats_id, as: :eventId

  nested :venue do
    property :venue_id, as: :venueId
  end
end

# test/models/nhl/game_test.rb

class Nhl::GameTest < ActiveSupport::TestCase
  context 'initializing w/Representer' do
    should 'map attributes correctly' do
      real_hash = {
        :eventId => 1553247,
        venue: {
          :venueId=>28,
          :name=>"Air Canada Centre"
        }
      }

      game = Nhl::Game.new.extend(Nhl::GameRepresenter).from_hash(real_hash)

      assert_equal 1553247, game.stats_id
      assert_equal 28, game.venue_id
    end
  end
end

这里第一个断言通过,但第二个断言(场地)失败。我的nested块似乎无法执行任何操作,因为game.venue_id最终为nil

回顾自述文件,我意识到:

  

&#34;请注意::内部嵌套是使用Decorator实现的。&#34;

...代码示例使用Class SongRepresenter < Representable::Decorator。所以我改写了这样的代表:

class Nhl::GameRepresenter < Representable::Decorator # <--- change to class
  include Representable::Hash
  include Representable::Hash::AllowSymbols

  property :stats_id, as: :eventId

  nested :venue do
    property :venue_id, as: :venueId
  end
end

在我的测试中,我然后像这样设置game对象:

game = Nhl::GameRepresenter.new(Nhl::Game.new).from_hash(real_hash)

但是,我仍然遇到同样的问题:game.venue # => nil

任何有使用这个宝石的经验的人都可以指出我做错了什么吗?

0 个答案:

没有答案