質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
XML

XMLは仕様の1つで、マークアップ言語群を構築するために使われています。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

HTTP

HTTP(Hypertext Transfer Protocol)とはweb上でHTML等のコンテンツを交換するために使われるアプリケーション層の通信プロトコルです。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

Q&A

解決済

1回答

1762閲覧

REXMLでxmlドキュメントを作成しPostしようとするとundefined method `bytesize' for となってしまう。

HideStar

総合スコア13

XML

XMLは仕様の1つで、マークアップ言語群を構築するために使われています。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

HTTP

HTTP(Hypertext Transfer Protocol)とはweb上でHTML等のコンテンツを交換するために使われるアプリケーション層の通信プロトコルです。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

0グッド

1クリップ

投稿2020/07/01 05:41

前提・実現したいこと

Ruby on Rails と楽天RMSAPIを利用して、クーポンを発行するアプリを作成しています。
REXML::Document.newにてxmlドキュメントを作成し、Postしたいのですが、
NoMethodErrorが発生してしまいます。
色々と調べましたが原因が分からず困っています。
ご教授頂けると幸いです。
プログラミング初心者です。

発生している問題・エラーメッセージ

NoMethodError in HomeController#new undefined method `bytesize' for <UNDEFINED> ... </>:REXML::Document Did you mean? bytes Extracted source response = http.post(uri.path, data, header)

該当のソースコード

home_controller.rb

ruby

1 def new 2 require 'net/https' 3 require 'uri' 4 require 'rexml/document' 5 6 uri = URI.parse("https://api.rms.rakuten.co.jp/es/1.0/coupon/issue") 7 8 data = REXML::Document.new(<<-XML) 9 <?xml version="1.0" encoding="UTF-8"?> 10 <request> 11 <couponIssueRequest> 12 <coupon> 13 <couponName> 14 Test 15 </couponName> 16 17    ~長いので省略~ 18 </request> 19 XML 20 21 header ={ 22 'Content-Type' => "application/xml", 23 'Authorization' => 'ESA ' + Base64.strict_encode64('serviceSecret:licenseKey') 24 #店舗固有のKeyを記述 25 } 26 27 http = Net::HTTP.new(uri.host, uri.port) 28 http.use_ssl = true 29 http.verify_mode = OpenSSL::SSL::VERIFY_NONE 30 31 response = http.post(uri.path, data, header) 32 33 @body = response.body 34 @code = response.code 35 36 end

試したこと

エラーメッセージで検索しましたが有力な情報が見つけられませんでした。

補足情報(FW/ツールのバージョンなど)

Rubyバージョン:2.6.6p146
Railsバージョン:5.2.4.3
OS:WindowsServer2012R2
ブラウザ:Firefox77.0.1

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

ruby

1xmldata = StringIO.new 2data.write(xmldata) 3response = http.post(uri.path, xmldata.string, header)

もしくはREXML使っているようにみえませんので

ruby

1data = <<-XML 2XML

でもいいのではないでしょうか?

またはrender_to_stringでxmlを生成した方がよいように思います。


http.verify_mode = OpenSSL::SSL::VERIFY_NONE

通信相手がrakutenかどうか分からないという意味ですが支障ないのでしょうか?

投稿2020/07/01 08:09

asm

総合スコア15147

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

HideStar

2020/07/02 08:34

色々と調べていたら返信が遅くなってしまいました。 教えて頂いたコードで無事解決できました。 初歩的な質問に丁寧にご回答頂き、ありがとうございます。 StringIOというクラスは使用した事がありませんでしたので、勉強不足を痛感しております。 ご提案の件ですが、当初は、 data = <<-XML XML としておりまして、railsのerrorは出ないのですが、 楽天から[Request data is wrong format]と帰ってきてしまい、調べていくうちにREXMLにたどり着いた次第です。 render_to_stringについても検討してみたいと思います。 >通信相手がrakutenかどうか分からないという意味ですが支障ないのでしょうか? https://qiita.com/seisonshi/items/c23c0154c45ccbfa9999 こちらのサイトを参考にコードを書いていたのがそのまま残っていたようです。。 調べて不要と判断しましたので削除致しました。 ご指摘ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問