2016-12-05 2 views
0

Я пытаюсь найти объект @center возле объекта @school в зависимости от местоположения и показать центр на карте. Я мимо моего кода здесь, потому что я не уверен, что я сделал:Rails, mapbox и geocoder: найти объект рядом с другим объектом

здесь код отображения карты (с 2 данных: школа и центр):

<div id="school-map" data-coordinates="<%= @school.coordinates.reverse %>" data-centers="<%= @center.coordinates.reverse %>"> </div> 

здесь модель center.rb :

class Center 
    include Mongoid::Document 
    include Geocoder::Model::Mongoid 

    has_many :schools 
    accepts_nested_attributes_for :schools 

    field :title,    type: String 

    field :image_path,  type: String 
    field :Attachment_path, type: String 
    field :website,   type: String 

    field :phone,    type: String 

    field :street,   type: String 
    field :zipcode,   type: String 
    field :city,    type: String 
    field :coordinates,  type: Array 

    geocoded_by :adress 
    #after_validation :geocode 

    def adress 
    [street, zipcode, city].compact.joint(', ') 
    end 

end 

В school.rb модели я попробовать этот метод:

def center_near_school(school_adress_coordinates) 
school_adress_coordinates = @school.coordinates.reverse 
center = Center.near(school_adress_coordinates, 1, units: :km) 

конец

и я пытаюсь показать строку типа «да» или «нет», чтобы знать, если мой метод работы:

<% if @school.center_near_school %> 
      <p> OUI </p> 
      <% else %> 
      <p> NON </p> 
      <% end %> 

создать отношения (HAS_MANY: школы и has_many: центры) в обеих моделях, маркеры поколений создаются в show.js, которые отображают карту.

Помогает ли кто-нибудь найти какие-либо решения для создания этой функции?

Не стесняйтесь просить меня, чтобы изменить этот пост с дополнительной информацией (код, точностями ...)

спасибо!

+0

'join', а не' joint'. Что уже работает? Метод 'near', который вы хотите написать? –

+0

@EricDumil метод рядом является методом геокодера, который уже существует –

+0

So. Что работает, а что нет? Вы получаете какую-либо ошибку? –

ответ

1

Center.near(school_adress_coordinates, 1, units: :km)

возвращает массив центров, который может быть пустым, если ни один центр не найден.

Ваш метод должен быть вызван centers_near_school, и вы могли бы использовать:

<% if @school.centers_near_school.empty? %> 
    <p> NON </p> 
<% else %> 
    <p> OUI </p> 
<% end %> 

В Ruby, каждый объект "truthy", за исключением false и nil. Даже пустой массив считается истинным в выражении if.

+0

Спасибо. У меня хороший результат! –

Смежные вопросы