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

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

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

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

1回答

1476閲覧

google map 表示できない undefined method `[]' for nil:NilClass

MISIAN-MISIAN

総合スコア73

Ruby on Rails 5

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2020/01/31 12:36

編集2020/01/31 13:06

google map api 使用して
住所から緯度経度所得さして
google map 表示させようとしています。
しかし、api_key直うちではエラーでないのですが、
変数にした際にundefined method `[]' for nil:NilClass
と出てデバックしたら、google_map_apiが無効ですと出ます。
変数の定義の仕方が違うのでしょうか?

Rails.application.credentials.google_map_apiで『credentials.ymlからデータを引っ張るよお』っていうコードがいるのでしょうか?どこに記載すればいいのでしょうか?
ご教授お願いします。

$ EDITOR="vi" bin/rails credentials:editコマンドで
api_keyを変数に代入しています。

google_map_apiという変数にapi_keyが入っています。
rails c で中身確認してもしっかり入っています。

ターミナル [1] pry(main)> Rails.application.credentials.google_map_api => "xxxxxxxxxxxxxxxxxxxxxxxx"
posts.rb class Post < ApplicationRecord mount_uploader :image, ImageUploader belongs_to :user geocoded_by :address after_validation :geocode private def geocode uri = URI.escape("https://maps.googleapis.com/maps/api/geocode/json?address="+self.address.gsub(" ", "")+"&key=google_map_api") res = HTTP.get(uri).to_s response = JSON.parse(res) self.latitude = response["results"][0]["geometry"]["location"]["lat"] self.longitude = response["results"][0]["geometry"]["location"]["lng"] end end

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

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

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

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

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

maisumakun

2020/01/31 14:22

APIから返ってくるJSONはどんな形でしょうか。
MISIAN-MISIAN

2020/01/31 14:45

[1] pry(#<Post>)> response = JSON.parse(res) => {"error_message"=>"The provided API key is invalid.", "results"=>[], "status"=>"REQUEST_DENIED"} [1] pry(#<Post>)> response = JSON.parse(res) => {"error_message"=>"The provided API key is invalid.", "results"=>[], "status"=>"REQUEST_DENIED"} [2] pry(#<Post>)> res = HTTP.get(uri).to_s => "{\n \"error_message\" : \"The provided API key is invalid.\",\n \"results\" : [],\n \"status\" : \"REQUEST_DENIED\"\n}\n" [3] pry(#<Post>)> uri = URI.escape("https://maps.googleapis.com/maps/api/geocode/json?address="+self.address.gsub(" ", "")+"&key=google_map_api") => "https://maps.googleapis.com/maps/api/geocode/json?address=%E6%9D%B1%E4%BA%AC%E9%83%BD%E4%B8%AD%E5%A4%AE%E5%8C%BA%E7%AF%89%E5%9C%B0%EF%BC%92%E4%B8%81%E7%9B%AE%EF%BC%93%E2%88%92%EF%BC%94&key=google_map_api" apiが無効というエラーメッセージが返ってきます
guest

回答1

0

ベストアンサー

ruby

1uri = URI.escape("https://maps.googleapis.com/maps/api/geocode/json?address="+self.address.gsub(" ", "")+"&key=google_map_api")

キーのところにgoogle_map_apiという、おそらくキーとして適切ではない文字列を渡しているようです。

投稿2020/01/31 14:47

maisumakun

総合スコア145184

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

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

MISIAN-MISIAN

2020/01/31 15:09 編集

credentials.ymlの中身は下記のようにしてapi_keyをgoogle_map_apiに代入しています。 下記の記載はあっているのでしょうか? aws: # access_key_id: 123 # secret_access_key: 345 # Used as the base secret for all MessageVerifiers in Rails, including the one protecting cookies. secret_key_base: xxxxxxxxxxxxxxxxxxxxxxx google_map_api: xxxxxxxxxxxxxxxxxxxx
maisumakun

2020/01/31 15:20

それ以前の問題です。値を取ってきて使うコードが書かれていません。
MISIAN-MISIAN

2020/01/31 15:37

google_map_api=Rails.application.credentials.google_map_apiの記載が足りないということでしょうか? この記載をどのファイルに記載すればいいのですか?
miyabi_takatsuk

2020/01/31 16:01

変数であるgoogle_map_apiを使っていなく、文字列としてただgoogle_map_apiを使ってしまっているコードになってる、ってことでは? なので、質問者さんの実コードが、変数としていれるようになっているのなら、そのように質問本文を修正してください。
MISIAN-MISIAN

2020/01/31 16:30

ありがとうございます。 answerの意味がわかりました。 URI.escape("https://maps.googleapis.com/maps/api/geocode/json?address="+self.address.gsub( ", "")+"&key=#{google_map_api}") 変数として使用しました。 undefined local variable or method local で変数定義してないと出ます。 $ EDITOR="vi" bin/rails credentials:editの中身の記載が違うのですかね?
miyabi_takatsuk

2020/02/01 15:16

違います。 そうであるなら、google_map_api変数をそもそも定義してないって意味のエラーです。 でも、そこはもう質問者さんしかわからないので(keyパラメータに与えるべき文字列が)keyパラメータに与えるべき文字列を、google_map_api変数に入れなければいけませんが、 それは質問者さんがそういう構文を書くしかありません。 (第三者には答えようがない部分)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問