前提・実現したいこと
RailsでAirbnbのクローンアプリを作成しております。
民宿を検索する機能を実装中に以下のエラーが発生しました。
発生している問題・エラーメッセージ
検索後、Geocodeが機能する場合と、機能しない場合があります。
機能しない場合はエラーとなります。
例えば、以下の通り入力すると検索ができます。
「Shibuya, Tokyo, Japan」
「Burwood VIC, Australia」
参考(GIF):https://gyazo.com/5a0ac0650b4fd4d198afc3cbd3823beb
ただ、例えば下記のように入力すると検索が出来ず、エラー画面が表示されます。
原因がわからず、ご指摘いただけますようお願いします。
「Tokyo Station, 1 Chome-9 Marunouchi, Chiyoda, Tokyo, Japan」
「Tokyo Disneyland, Maihama, Urayasu, Chiba Prefecture, Japan」
参考(GIF):https://gyazo.com/29856462abc2847794a9f8d5a80c33cc
エラー画面: https://gyazo.com/7c3f52c3d264edf32a1be82d00c6a307
ログ画面: https://gyazo.com/8a20c466bc5404c33a312f4f8548a181
エラーメッセージは「NoMethodError at /search
undefined method `coordinates' for nil:NilClass」です。
該当のソースコード
class PagesController < ApplicationController def home @rooms = Room.where(active: true).limit(3) end def search #STEP 1 if params[:search].present? && params[:search].strip != "" session[:loc_search] = params[:search] #session[:loc_search] end #STEP 2 if session[:loc_search] && session[:loc_search] != "" #binding.pry results = Geocoder.search(session[:loc_search]) @rooms_address = Room.where(active: true).near(results.first.coordinates, 5, units: :km) else @rooms_address = Room.where(active: true).search(session[:loc_search]) end #STEP 3 @search = @rooms_address.ransack(params[:q]) @rooms = @search.result @arrRooms = @rooms.to_a #STEP 4 if (params[:start_date] && params[:end_date] && !params[:start_date].empty? && !params[:end_date].empty?) start_date = Date.parse(params[:start_date]) end_date = Date.parse(params[:end_date]) @rooms.each do |room| not_available = room.reservations.where( "(? <= start_date AND start_date <= ?) OR (? <= end_date AND end_date <= ?) OR (start_date < ? AND ? < end_date)", start_date, end_date, start_date, end_date, start_date, end_date ).limit(1) if not_available.length > 0 @arrRooms.delete(room) end end end end end
試したこと
デバックをしてみましたが、検索が成功出来ている場合、
Geocoder.search(session[:loc_search])
で返り値が返ってきますが、失敗の場合は[]となりますので、
何かの理由で
Geocoderが緯度と経度を取れないのではないかと考えています。
補足情報(FW/ツールのバージョンなど)
ruby '2.4.1'
'rails', '> 5.2.1'> 1.5.0'
'geocoder', '
以上、よろしくお願いします。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/11/08 13:59 編集
2019/01/08 09:09