1

私は 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

この宝石を使用した経験のある人は、私が間違っていることを指摘できますか??

4

0 に答える 0