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