Я пытаюсь реализовать геокодер в моем приложении.Я хотел бы показать близлежащие места на странице каждого места.Я продолжаю получать эту ошибку:
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
Контроллер мест:
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
В результате ятолько сокращайте, создавайте новые места с одними адресами, а я могу с другими.Как я могу предотвратить эту ошибку?Я думал, может быть, есть метод, который проверяет, были ли созданы широта и долгота местоположения.Если нет, то сгенерируйте их перед сохранением.Как мне реализовать эти условия?