@yuiko1357

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

Google map APIで取得した緯度経度をDB(postsテーブル)に保存する

###GoogleMapsAPIをDBに保存したい

Ruby on Railsでlifeという避難情報などを記載した架空のサイトを作成しています。
記事を投稿する機能の実装中にエラーが発生しました。
解決方法を教えて下さい。

メソッドがコントローラーにないよ、といわれている

NoMethodError in Public::PostsController#index
undefined method `fetch_data' for Post:Class

該当するソースコード

post.rb=>
    self.fetch_data
    select(:classNo, :class, :text, :name, :status, :lat, :lng, :img)

post.ccontroller=>
@posts_data = Post.fetch_data

show.html=>
<div class="font-weight-bold">地図検索</div>
                    <input id="address" type="textbox" value="GeekSalon">
                    <input type="button" value="検索" onclick="codeAddress()">  ※下記に記載されている住所を地図上のバーで検索してください。
                        <div id="display">検索結果が表示されます</div>
                            <div id='map'></div>

                            <style>
                                #map {
                                  height: 400px;
                                  width: 500px;
                                }
                            </style>

                            <script>
                                let map
                                let geocoder

                                const display = document.getElementById('display')

                                function initMap(){
                                  geocoder = new google.maps.Geocoder(),

                                  map = new google.maps.Map(document.getElementById('map'), {
                                    // latが緯度、lngが経度を示します
                                    center: {lat: 40.7828, lng:-73.9653},
                                    //数値は0〜21まで指定できます。数値が大きいほど拡大されます
                                    zoom: 10,
                                  });
                                  //positionに指定した座標にピンを表示させます
                                  marker = new google.maps.Marker({
                                    position:  {lat: 40.7828, lng:-73.9653},
                                    map: map
                                  });
                                }

                                  //検索フォームのボタンが押された時に実行される
                                function codeAddress(){
                                  //検索フォームの入力内容を取得
                                  let inputAddress = document.getElementById('address').value;

                                  geocoder.geocode( { 'address': inputAddress}, function(results, status) {
                                    //該当する検索結果がヒットした時に、地図の中心を検索結果の緯度経度に更新する
                                    if (status == 'OK') {
                                      map.setCenter(results[0].geometry.location);
                                      var marker = new google.maps.Marker({
                                          map: map,
                                          position: results[0].geometry.location
                                      });
                                      display.textContent = "検索結果:" + results[ 0 ].geometry.location
                                    } else {
                                      //検索結果が何もなかった場合に表示
                                      alert('該当する結果がありませんでした:' + status);
                                    }
                                  });
                                }
                            </script>
                この行にAPI記載あり

例)

def greet
  puts Hello World
end

自分で試したこと

controllerにfetchを追加

database.ymlに下記を追加

default: &default
adapter: mysql2
encoding: utf8
pool: 5
username: <%= ENV.fetch['DB_USERNAME'] %>
password: <%= ENV.fetch['DB_PASSWORD'] %>
host: <%= ENV.fetch['DB_HOST'] %>

development:
<<: *default
database: your_database_name_development

test:
<<: *default
database: your_database_name_test

production:
<<: *default
database: your_database_name_production

0 likes

1Answer

エラーの内容は「Post:Classfetch_dataメソッドがない」というものです。

NoMethodError in Public::PostsController#indexPostsControllerの処理中にエラーが出たことを示すだけの情報になります。

全体像がわからないので修正する指針は示せませんので、ご自身で対応をお願いします。

0Like

Your answer might help someone💌