ruby-on-rails - 地理编码器:.nearbys 方法抛出 ActionView::Template::Error(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'
我认为这与某些地方被地理编码而其他地方没有有关。例如,对于我在控制台中拥有的这个地址,纬度和经度值 output 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
地方控制器:
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)
...
推荐阅读
- shell - 使用 vultr-cli 在 Vultr 部署后检索实例 ID?
- laravel - 如何在 laravel 中为 10 种类型的用户进行登录?
- c# - 在C#中扫描二维码后如何使用浏览器打开URL?
- r - R:根据最后一次调用的输出递归地指定函数的输入
- mysql - 更新 MySQL 字段值
- android - 从kotlin中的地图获取价值
- javascript - jquery过滤具有多个条件的类别
- python - 嵌套列表中的值的总和
- reactjs - 如何根据 ReactJS 中的道具从我的资产文件夹中动态加载图像?
- javascript - 如何为 JavaScript 中的特定名称动态计算对象数组中的字段