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

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

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

Deviseとは、Ruby-on-Railsの認証機能を追加するプラグインです。

Ruby on Rails

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

Google マップ

Google Mapは、Google社がオンラインで提供している地図・ローカル検索サービスです。GIS(Geographic Information System:地理情報システム)の中の「WebGIS」に該当します。地図・航空写真・地形の表示方式があり、それぞれユーザーが縮尺を調整して表示させることができます。地域の情報サービスを検索する機能やルート検索の機能も搭載されています。

Q&A

解決済

1回答

2432閲覧

ユーザー登録から緯度経度を取得できない

tanake

総合スコア0

Devise

Deviseとは、Ruby-on-Railsの認証機能を追加するプラグインです。

Ruby on Rails

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

Google マップ

Google Mapは、Google社がオンラインで提供している地図・ローカル検索サービスです。GIS(Geographic Information System:地理情報システム)の中の「WebGIS」に該当します。地図・航空写真・地形の表示方式があり、それぞれユーザーが縮尺を調整して表示させることができます。地域の情報サービスを検索する機能やルート検索の機能も搭載されています。

0グッド

0クリップ

投稿2020/09/25 04:35

編集2020/09/25 10:42

前提・実現したいこと

現在、アプリ作りとしてRuby on Railsで出品者の住所を元に購入者が取りに行くアプリを作っています。
その際google マップAPIを活用し、初期のマップの中心地点を購入者にしたいと思っています。
出品者と購入者はそれぞれ別モデルでgemのdeviseを使い作成しています。
google マップへ住所の表示をするためにgemのgeocoderを使っています。

しかし、geocoderを使いユーザー登録しようとしているのですが、緯度経度のカラムに値が入りません。
結果、マップの中心地点を決めれずにいます。住所は登録できているので、
:latitude,:longitudeに値を入れたい

実現したいこと
gemのgeocoderを使い、ユーザーの緯度経度の取得。
住所はユーザー登録の段階でできているので、コントローラーが原因か?
そもそもdeviseでの新規登録に対し、geocoderの緯度経度を取得するタイミングが違うのか

コード

app/models/exhibition.rb class Exhibition < ApplicationRecord extend ActiveHash::Associations::ActiveRecordExtensions belongs_to_active_hash :prefecture has_many :items devise :database_authenticatable, :registerable, :recoverable, :rememberable, :validatable KATAKANA_REGEX = /\A[ァ-ヶー-]+\z/.freeze # 全角カタカナのみ geocoded_by :address before_validation :geocode with_options presence: true do validates :address validates :city_number end
app/controllers/exhibitions/registrations_controller.rb class Exhibitions::RegistrationsController < Devise::RegistrationsController before_action :configure_sign_up_params, only: [:create] before_action :move_to_index protected def configure_sign_up_params devise_parameter_sanitizer.permit(:sign_up, keys: [:address,:city_number,:latitude,:longitude]) end
db/schema.rb create_table "exhibitions", options: "ENGINE=InnoDB DEFAULT CHARSET=utf8", force: :cascade do |t| t.string "email", default: "", null: false t.string "encrypted_password", default: "", null: false t.string "address", null: false t.string "city_number", default: "", null: false t.string "reset_password_token" t.datetime "reset_password_sent_at" t.datetime "remember_created_at" t.datetime "created_at", precision: 6, null: false t.datetime "updated_at", precision: 6, null: false t.float "latitude" t.float "longitude" t.index ["email"], name: "index_exhibitions_on_email", unique: true t.index ["reset_password_token"], name: "index_exhibitions_on_reset_password_token", unique: true end

###環境

API Geocoding API Maps JavaScript API

試したこと

コントローラーをいじったがdeviseで作成し、ユーザー登録時にdevise_parameter_sanitizerを調整など

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

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

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

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

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

kuma_kuma_

2020/09/25 05:00

元々の話ユーザが現在位置の送信を拒否してたらとれないよね?
tanake

2020/09/25 06:36

kuma_kuma_さんご回答ありがとうございます! すみません、まだ慣れていないため理解が追いついていないのですが「現在位置の送信を拒否してたらとれない」とはどういった意味なのでしょうか? 住所(address)を入力する欄にはpresence: trueでバリデーションを指定しているので空の登録はできないようにしています。 自分の解釈では ユーザー登録時に住所(address)を入力してもらい、モデルの ``` geocoded_by :address before_validation :geocode ``` の記述により geocoderが勝手に緯度経度を表すカラム「latitude」と「longitude」に値を割り振ってくれる。結果、そのユーザーの登録時に「latitude」に「longitude」値が入り登録されると思っていたのですが、現在そのテーブルの「latitude」に「longitude」カラムはNULLのままです。
kuma_kuma_

2020/09/25 21:28 編集

Google Map 使うときユーザに「現在位置を送信しても良いか」の問い合わせがあるでしょ? 位置情報扱うとき必ず「ユーザに確認」するのがルールだから (アンドロイド ソフトの場合 インストール時にも確認) ちなみにAPIkeyの設定がないように見受けられますが? (APIkey自体は載せないで下さい) 【Rails】Geocoding APIを用いて高精度で緯度経度を算出し、Google Mapに表示する方法 https://qiita.com/matsubishi5/items/1b784dbbe5f1c336ac70
tanake

2020/09/26 09:14

kuma_kuma_さんありがとうございます! おかげさまで無事、緯度経度無事取得することができました????‍♀️ 前にもこちらの記事を参考にしていたのですが、その時は他の記事の記述も参考にしていたために エラーが起きダメだったんですね。。 この2週間ずっと悩んで、他人に聞くのがはずかしいと思いterateilでの質問に躊躇していたのですが、 結果物凄く助かりました。本当にありがとうございます。 これからも精進して取り組みたいと思います。本当にありがとうございました。
guest

回答1

0

自己解決

こちらを参考に解決しました。
https://qiita.com/matsubishi5/items/1b784dbbe5f1c336ac70

投稿2020/09/27 01:14

tanake

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問