地方でリモートワーク

プログラミング、先物、fx,仮想通貨なんでもやります

楽天Ruby-SDKですべてのレスポンスパラメータにアクセスする方法

スポンサーリンク

f:id:ihatov08:20160906130811j:plain

楽天Ruby-SDKですべてのレスポンスパラメータにアクセスして、viewに表示する方法です。

github.com

レスポンスパラメータをすべて表示してほしいと要望があったのでやってみました。 なかなか大変でした。 公式サイトには取得してきたオブジェクトはhashのように扱えると記載がありました。しかし、コンソールで叩いて調べてみても、完全なhashオブジェクトではありませんでした。そのため、hashクラスで使えるメソッドを使うことができませんでした。 keysメソッドとか使えれば一瞬だったのですが、使えず残念です。 ActiveRecordに基づくオブジェクトなら下記の方法ですべてにアクセスできます。

www.tom08.net

結局はこんな感じのコードでアクセスできました。 Railsに用意されているinstance_valuesメソッドで無理やりhashに変換しました。しかし、まだここで階層構造になっていて、配列の中にhashが入っていたので["params"]で一回配列を取り出してから、hashクラスに定義されているkeysメソッドでhashのキーを取り出して、eachで回しています。hashの値を取得したいときはvaluesで取り出せます。

またかなり横に長くなってしまうので、スクロールのCSSも適用させています。

<div class="row">
  <div class="col-sm-12">
    <div class="panel panel-default contents">
      <div class="panel-body">
        <table class="table table-bordered contents">
          <thead>
          <% if @items.present? %>
            <% @items.first.instance_values["params"].keys.each do |key| %>
              <th><%= key %></th>
            <% end %>
          <% end %>
          </thead>
          <tbody>
          <% if @items.present? %>
            <% @items.each do |item| %>
              <tr>
              <% item.instance_values["params"].values.each do |value| %>
                <td height="150"><div><%= value %></div></td>
              <% end %>
              </tr>
            <% end %>
          <% end %>
          </tbody>
        </table>
      </div>
    </div>
  </div>
</div>

<style type="text/css">
  table.contents th {
    width: 150px;
  }
  table.contents td {
    width: 150px;
  }
   div.contents {
     overflow-x: auto;
   }
  table.contents td {
    overflow-y: auto;
  }
  table.contents td div {
    overflow: auto;
    height: 150px;
    width: 150px;
  }

</style>

楽天SDKもう少し使いやすくならないかなー