前提・実現したいこと
現在、アプリ作りとして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を調整など
回答1件
あなたの回答
tips
プレビュー