ruby-on-rails - Geocoder:.nearbys 方法抛出 ActionView::Template::Error (nil:NilClass 的未定义方法 `each'):

标签 ruby-on-rails ruby rails-geocoder

我正在尝试在我的应用程序中实现地理编码器。我想在每个地点的页面上显示附近的地点。我不断收到此错误:

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 方法对其不起作用。但是,对于其他地址,会自动生成纬度和经度值(如预期)。这是我的代码: 地点型号:

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

地点 Controller :

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

地点显示 View :

          %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)
   ...

关于ruby-on-rails - Geocoder:.nearbys 方法抛出 ActionView::Template::Error (nil:NilClass 的未定义方法 `each'):,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53642700/

相关文章:

ruby - Delayed_job:作业加载失败:未初始化的常量 Syck::Syck

sql - 查询所有特定记录,其中其相关资源都具有相同的单个属性值

ruby-on-rails - 这个 gem 如何与您的错误处理 Hook ?

ruby-on-rails - Rails 地理编码模型中的两种方式

ruby-on-rails - 在谷歌地图上动态显示标记-Rails 3.2

ruby-on-rails - 如何在 Windows 中更新 ruby

ruby-on-rails - ruby1.9.1 - ubuntu 9.10 x64 上的 sqlite3 问题(没有要加载的文件 -- sqlite3)

ruby-on-rails - 如何知道rails中的bootstrap版本

ruby-on-rails - 在 Rails Active Record 查询中使用大于或小于

ruby-on-rails - Rails Geocoder Gem 如何访问 Google API?