私は 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
ここでは、最初のアサーションは成功しますが、2 番目のアサーション (会場) は失敗します。私のnested
ブロックは何もgame.venue_id
していないようnil
です.
readme を振り返ってみると、次のように書かれていることに気付きました。
「 ::nested 内部はデコレータを使用して実装されていることに注意してください。」
...そしてコード例では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
この宝石を使用した経験のある人は、私が間違っていることを指摘できますか??