簡體   English   中英

地理編碼器:.nearbys 方法拋出 ActionView::Template::Error(nil:NilClass 的未定義方法 `each'):

[英]Geocoder: .nearbys method throwing ActionView::Template::Error (undefined method `each' for nil:NilClass):

我正在嘗試在我的應用程序中實現地理編碼器。 我想在每個地方的頁面上顯示附近的地方。 我不斷收到此錯誤:

ActionView::Template::Error (undefined method `each' for nil:NilClass):
    38:            
    39:               %h4 Nearby places
    40:               - @place.nearbys.each do |place|
    41:                 %li
    42:                   = link_to place.name, place
    43:                   (#{place.distance.round(2)} kilometers)

app/views/places/show.html.haml:40:in `_app_views_places_show_html_haml__1604860997730316275_70230188982160'

我認為這與一些地方被地理編碼有關,而另一些地方則沒有。 例如,對於我擁有的這個地址,在控制台中,緯度和經度值輸出nil ,而.geocode方法.geocode不起作用。 但是,對於其他地址,緯度和經度值是自動生成的(如預期的那樣)。 這是我的代碼:放置模型:

class Place < ApplicationRecord
  geocoded_by :full_address
  after_validation :geocode, if: :address_changed?

  def full_address
    [address1, address2, city, region].compact.join(", ")
  end

  def address_changed?
    address1_changed? || address2_changed? || city_changed? || region_changed?
  end


end

位置控制器:

def show
  @place = Place.find(params[:id])
end


def create
    @place = Place.new(place_params)
    respond_to do |format|
      if @place.save
        format.html { redirect_to @place, notice: 'Place was successfully created.' }
        format.json { render :show, status: :created, location: @place }
      else
        format.html { render :new }
        format.json { render json: @place.errors, status: :unprocessable_entity }
      end
    end
  end

地點顯示視圖:

          %p= @place.address1
          %p= @place.address2
          %p= @place.city
          %p= @place.region
          %p= @place.phone
          %p= @place.email

          #mapid
           %h4 Nearby places
           - @place.nearbys.each do |place|
             %li
              = link_to place.name, place
              (#{place.distance.round(2)} kilometers)



def place_params
      params.require(:place).permit(:name, :description, :address1, :address2, :city, :region, :phone, :email)
    end

結果,我只能用一些地址創建新的地方,而我可以用其他地址。 如何防止此錯誤? 我在想也許有一種方法可以檢查位置緯度和經度是否已生成。 如果沒有,則在保存之前生成它們。 我如何實現這些條件?

你可以在那里做一個簡單的驗證,比如

if @place.nearbys.present?
  - @place.nearbys.each do |place|
    %li
      = link_to place.name, place
      (#{place.distance.round(2)} kilometers)
   ...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM