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

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

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

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

Ruby

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

Q&A

解決済

1回答

905閲覧

POSTリクエストする際、日付が原因?でエラーになる

pecchan

総合スコア555

Ruby on Rails 5

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

Ruby

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

0グッド

0クリップ

投稿2023/03/15 03:34

編集2023/03/16 10:36

rails5.2

実現したいこと

外部サービスのAPIを利用したい

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

"HTTP/1.1 500 Internal Server Error\

前提

rubyのnet/httpからPOSTリクエストすると500エラーになりました。

単純なGETやPOSTリクエストは動いております。
今回のリクエストもcurlレベルでは成功してます。
日付の部分をコメントアウトするとrubyからも成功します。
よって
パラメータ(日付)の指定部分がエラーの原因という所まで突きとめましたが、ここから具体的にどう修正して良いかわからずにいます。

日付はISO8061指定で、全て試したが変わらずでした。
よって日付フォーマットではなくハッシュでの渡し方が原因でしょうか?
この辺りよく分からずにいます。

該当のソースコード

ruby

1params = { 2 user_id: user.id, 3 door_id: smart_lock.door_id, 4 schedule_type: 'temporary', 5 temporary_schedule: { 6 start_datetime: '2023-05-01T20:45:20+09:00', #'2023-05-01T20:45:20', #'20230416T163025', #'20230410T163025+0900', #'2023-04-10T13:00:00+0900', 7 end_datetime: '2023-05-02T20:45:20+09:00' #'2023-05-02T20:45:20' #'20230418T163025' #'20230418T163025+0900' #'2023-04-18T13:00:00+0900' 8 }, 9 role: 'guest' 10 } 11 res = http_post(key_uri, params, smar_lock.access_token)

curlでは成功してます↓

curl

1% curl -X POST "https://api.xxxx.com/v3/organizations/O-OOOOO/keys" \ 2 -H "Authorization: Bearer SxxxxxxxxxxxxxxxxxxxxVdIe4g" \ 3 -d user_id=00001 \ 4 -d door_id=A22207314 \ 5 -d schedule_type=temporary \ 6 --data-urlencode temporary_schedule[start_datetime]=2023-04-13T12:30+09:00 \ 7 --data-urlencode temporary_schedule[end_datetime]=2023-04-20T12:30+09:00 \ 8 -d role=guest

試したこと

paramsのうち日付をコメントアウトするとエラーなく成功しました。

ruby

1params = { 2 user_id: user.id, 3 door_id: smart_lock.door_id, 4 schedule_type: 'temporary', 5 role: 'guest' 6 }

POST時のnet/httpのログを出力しました。
日付が変換されておりました。

door_id=A5507314& schedule_type=temporary& temporary_schedule=%7B%3Astart_datetime%3D%3E%222023-05-01T20%3A45%3A20%2B09%3A00%22%2C+%3Aend_datetime%3D%3E%222023-05-02T20%3A45%3A20%2B09%3A00%22%7D &role=guest" -> "HTTP/1.1 500 Internal Server Error\r\n"

補足

外部サービスのAP仕様書のサンプルはこうなっています↓
日付はISO8061指定となっております。

curl -X POST "https://api.hoge.com/v3/organizations/O-ab345-678ij/keys" \ -H "Authorization: Bearer c226b89bce98ebb8f6626be1bda25fb80ac56de6a1f7b3526cbad59e0e4af252" \ -d user_id=U-ab345-678ij \ -d door_id=A1030001 \ -d schedule_type=temporary \ --data-urlencode temporary_schedule[start_datetime]=2017-09-13T12:30+09:00 \ --data-urlencode temporary_schedule[end_datetime]=2017-09-20T12:30+09:00 \ -d role=guest

何が原因でしょうか?
分かる方居ましたら教えていただけると幸いです。
宜しくお願い致します。

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

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

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

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

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

guest

回答1

0

ベストアンサー

ruby

1 temporary_schedule: { 2 start_datetime: '2023-05-01T20:45:20+09:00', #'2023-05-01T20:45:20', #'20230416T163025', #'20230410T163025+0900', #'2023-04-10T13:00:00+0900', 3 end_datetime: '2023-05-02T20:45:20+09:00' #'2023-05-02T20:45:20' #'20230418T163025' #'20230418T163025+0900' #'2023-04-18T13:00:00+0900' 4 },

curl の例と同じなら、

ruby

1 'temporary_schedule[start_datetime]': '2023-05-01T20:45:20+09:00', 2 'temporary_schedule[end_datetime]': '2023-05-02T20:45:20+09:00',

ではないでしょうか。

投稿2023/03/15 04:22

編集2023/03/15 04:24
int32_t

総合スコア20756

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

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

otn

2023/03/16 01:36

細かいことですが、 > ハッシュのキーの書き方、文字列でも可能なんですね。 それはシンボルです。 { 'temporary_schedule[start_datetime]': '2023-05-01T20:45:20+09:00' } は、 { :'temporary_schedule[start_datetime]' => '2023-05-01T20:45:20+09:00' } の別記法で、 :'temporary_schedule[start_datetime]'のように先頭にコロンがついた物はシンボルです。 { 'temporary_schedule[start_datetime]' => '2023-05-01T20:45:20+09:00' } は、キーが文字列で、これとは異なります。 参考: ruby -e "p({'a[x]': 1})" {:"a[x]"=>1}
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問