#環境
ruby 2.6.5
rails 6.0.0
MySQL
Github
#実現させたいこと
Google Maps Platformを利用し、アプリケーションにマップを表示させる。
その際に、すでに構築しているデータベースのテーブル内の複数のカラムをまとめて住所として扱いたい
#記事を投稿するに至った背景
投稿主はアプリの作成の段階で、住所に関するカラムを「都道府県」、「市区町村」、「それ以降」というように分類しており、一方で、Qiitaに投稿されている記事では、ほぼ全てが一つのカラム(例 address)で完結させていた。
そのためデータベース状況が異なり、多くの記事を参考にさせていただいたが、うまくマップを表示させられなかったので解決までの過程を投稿します。
ですので、現段階で住所に関するカラムを1つのみで構成しようという方は以下の記事を参考にしてください。
https://qiita.com/osugi_san/items/72d58bf034dc2db9d02c
#前提
以下の文章は上記のURLの「住所に関するカラム以外」のプロセスを行ってからコーディングをお願いします。
投稿主のデータベース
テーブル board
カラム prefecture_id(都道府県),municipality(市区町村),edaban(番地)
#解決策
モデルに以下の文を記述
def address
[self.prefecture.name,self.municipality,self.edaban].compact.join()
end
このように入力することで、カラムのデータをaddressという変数にまとめることができます。
余談ですが、join()の()内にハイフンなどを置くことでデータ間に入力したものを置くことができます。
今回はデータとデータの間は空白であることが望ましいので記述しません。
最終的な記述は以下の通りです。
(略)
geocoded_by :address
after_validation :geocode
def address
[self.prefecture.name,self.municipality,self.edaban].compact.join()
end
(略)
これで無事にマップを表示させることができました。
#まとめ
ご覧いただきありがとうございました。
データベースを設計しなおせば良いのでは?と思った方もいるかと思いますが、おっしゃる通りです。
それでもよかったのですが、やり方が分からずDB設計をし直すのは、私個人のプライドが許さなかったので、どうにかして自力で解決をしました(笑)
同じようにデータベースの構成を崩したくない、2つ以上のカラムを使ってgeocodingしたい、という方々の手助けになれば幸いです。