我使用了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
任何有使用这个宝石的经验的人都可以指出我做错了什么吗?