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

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

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

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

POST

POSTはHTTPプロトコルのリクエストメソッドです。ファイルをアップロードしたときや入力フォームが送信されたときなど、クライアントがデータをサーバに送る際に利用されます。

Ruby on Rails

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

API

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

Q&A

2回答

6248閲覧

RailsにてAPIのPOSTについて undefined methodで困っています。

Mkato

総合スコア118

Ruby

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

POST

POSTはHTTPプロトコルのリクエストメソッドです。ファイルをアップロードしたときや入力フォームが送信されたときなど、クライアントがデータをサーバに送る際に利用されます。

Ruby on Rails

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

API

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

0グッド

0クリップ

投稿2015/11/26 19:29

ruby 2.1.3
Rails 4.2.3
ローカルでのPCはmac

現在 NoMethodError: undefined method となり困っております。

以下状況の説明です。
APIを使ったサイト作成をしており、データをPOSTしたいと考えております。

#postする値 uri = URI.parse "https://XXXXXXXXXXXXXXXXXXXX.com" method = POST body = JSON.parse('{ "hogehogehogehoge": "hogehogehoge" }') headers = { "ACCESS-KEY" => key, "ACCESS-TIMESTAMP" => nonce, "ACCESS-SIGN" => signature, "Content-Type" => 'application/json' }

上記値を以下の様にPOSTしています。

https = Net::HTTP.new(uri.host, uri.port) https.use_ssl = true response = https.post(uri, method, body, headers) puts response.body

rails c の結果

NoMethodError: undefined method `<<' for #<Hash:0x007fe212802d38> from /Users/私の名前/.rbenv/versions/2.1.3/lib/ruby/2.1.0/net/protocol.rb:106:in `read'

undefined method <<'との事で、protocol.rb:106:in read'を確認したのですが、このあたりはrails本体のプログラムなのかなーと思うので、修正する事は少ないだろうと考えており、何を修正すれば良いのか検討がついておりません。

def read(len, dest = '', ignore_eof = false) LOG "reading #{len} bytes..." read_bytes = 0 begin while read_bytes + @rbuf.size < len dest << (s = rbuf_consume(@rbuf.size)) read_bytes += s.size rbuf_fill end dest << (s = rbuf_consume(len - read_bytes)) # ここが106行目になります。 read_bytes += s.size rescue EOFError raise unless ignore_eof end LOG "read #{read_bytes} bytes" dest end

ここを確認するなどすればいいよ。などございますでしょうか?
※初心者なのでまずPOSTの方法があっているかどうかも怪しいのですが。。。

宜しくお願いします。

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

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

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

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

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

guest

回答2

0

参考情報を紹介します。

...

フォームの情報を送信する (POST)

require 'net/http'
require 'uri'

#例1: POSTするだけ
res = Net::HTTP.post_form(URI.parse('http://www.example.com/search'),
{'q'=>'ruby', 'max'=>'50'})
puts res.body

投稿2015/11/28 00:24

katoy

総合スコア22324

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

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

0

Net:HTTP#postを直接呼び出す場合、リクエストボディを文字列として(multipart/form-dataapplication/x-www-form-encodedの形で)与える必要があります。ハッシュでは動きません。

特に細かな設定が不要な場合、Net::HTTP.post_formを使えば、ハッシュのまま引数を渡せます。

投稿2015/11/27 00:34

編集2015/11/27 00:36
maisumakun

総合スコア145184

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問